Рубрики
Uncategorized

Операция перегрузки объектно-ориентированного программирования PHP

Автор оригинала: David Wong.

В этой статье приведен пример операции перегрузки объектно-ориентированного программирования PHP. Поделитесь для вашей справки следующим образом:

тяжелый груз

“Перегрузка” в PHP отличается от большинства других объектно-ориентированных языков, за исключением того, что все они используют одно и то же существительное. Традиционная “перегрузка” используется для предоставления нескольких классов с одинаковым именем, но параметры каждого метода различаются по типу и количеству. “Перегрузка”, предоставляемая PHP, относится к динамическому “созданию” атрибутов и методов класса. При вызове текущей среды Не определено или Невидимые Перегруженные методы вызываются при использовании атрибутов или методов класса. Это достигается магическими методами.

Вообще говоря, атрибуты членов в классе определяются как частные, что больше соответствует логике реальности и может лучше защитить членов класса. Однако очень часто приходится читать и назначать атрибуты-члены, и очень сложно определить общедоступные методы, которые могут быть получены и назначены вне объекта для каждого частного атрибута в классе. Поэтому в версиях после PHP 5.1.0 два метода “_get()” и “_set()” предопределены для завершения операции получения и назначения всех используемых частных атрибутов, а также метод “_isset ()”, используемый для проверки наличия частных атрибутов, и метод “_unset ()”, используемый для удаления частных атрибутов в объектах. Обычно перегрузка в PHP означает, что, когда объект или класс использует свои неопределенные или невидимые атрибуты и методы, некоторые из них являются “механизмами обработки”.

Переопределение свойств

Когда используется атрибут, которого нет в объекте, в этом классе предоставляется заранее определенный ответ (механизм обработки).

Атрибут-это, по сути, переменная, содержащая всего четыре операции:

Ценность:

Когда атрибут объекта не существует (неопределенный или невидимый)” имеет значение”, метод вызывается автоматически: __GET() Метод не учитывает регистр.

Назначение:

Когда атрибут несуществующего объекта (неопределенный или невидимый) “присваивается”, автоматически вызывается метод: __SET()

Иссет:

Когда isset () определяет атрибут, который не существует (неопределенный или невидимый) для объекта, метод вызывается автоматически: isset()

Уничтожение (не установлено):

Когда функция unset () определяет атрибут, который не существует в объекте (неопределенный или невидимый), метод вызывается автоматически: unset()

Эти четыре метода называются магическими методами.

Магические Методы

_ GET (имя атрибута$):

Метод вызывается автоматически, когда “значение” применяется к атрибуту, который не существует в объекте. Метод может использовать параметр для указания имени атрибута (строки), которого не существует, чтобы получить значение. Этот метод может быть использован для решения непредвиденных ситуаций особым образом.

Например:

php
class A{
  public $p1 = 1;
}
$a1 = new A();
echo $a1->p1; //1
Echo $a1 - > p2; // undefined $p2, will report an error, Notice: Undefined property: A:: $p2
?>

Перегрузка PHP, используя __get() Метод “изящной обработки” вышеуказанных ошибок.

{$prop_name} attribute has not been defined (does not exist)!" ";
    Return ";// Can also return 0, or false, etc.
    */
    // You can also do this.
    Trigger_error ("Error: Attribute does not exist! "(E_USER_ERROR);
    die();
  }
}
$a1 = new A();
echo $a1->p1; //1
Echo $a1 - > p2; // undefined $p2, but processed
?>

Вот пример операции для получения используемых личных атрибутов.

Пример:

name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  Private function get ($propertyName) {/// Here, use private modifier to prevent external class calls
    if($propertyName == 'age'){
      return $this->age;
    }
  }
}
$p = new Person ('yeoman','man', 23);
$v1 = $p->name;
$v2 = $p->sex;
$v3 = $p - > age; // automatically calls the _get() method to get the private property age (returned in the function definition)
echo "name=$v1, sex=$v2, age=$v3";
?>

Результаты заключаются в следующем:

Имя,,

_ НАБОР ($имя атрибута, значение):

При присвоении объекту несуществующего атрибута автоматически вызывается этот внутренний магический метод; он имеет два параметра, представляющих “имя атрибута” и “значение атрибута” для присвоения несуществующего атрибута. Этот метод в сочетании с методом _GET часто может сделать классы, которые мы определяем, расширяемыми. То есть атрибуты классов или объектов могут быть более удобными и бесплатными.

Пример:

prop_list[$p] = $v;
  }
  function __get($p){
    return $this->prop_list[$p];
  }
}
$a1 = new A();
$a1 - > P1 = 1; // assignment of non-existent attribute names, at which point _set() is called and passed to "p1" and "1"
$a1->p2 = 2;
$a1->ac = 'avc';
Echo "
outputs the values of these"nonexistent attributes"; Echo "< br /> A1 - > p1:" $A1 - > p1; // the value of the attribute name that does not exist is called _get () and passed to "p1" echo "
a1->p2:" . $a1->p2; echo "
a1->ac:" . $a1->ac; ?>

Результаты заключаются в следующем:

Выведите значения этих “несуществующих атрибутов”: a1->p1:1 a1->p2:2 a1->ac:avc

_ ISSET (имя атрибута$):

Когда атрибут для объекта не существует задан() При оценке автоматически вызываются внутренние методы: задан() ;

Использование:

$v1 = isset ($object - > nonexistent attribute); // The magic method in the class to which the object belongs is called at this time: isset ()

Пример:

prop_list[$p] = $v;
  }
  function __get($p){
    if($this->prop_list[$p]){
      return $this->prop_list[$p];
    }else{
      Return "This property does not exist! ";
    }
  }
  Function _isset ($prop) {//_isset () is a custom method and isset () is a system function
    $re = isset($this->prop_list[$prop]);
    return $re;
  }
}
$a1 = new A();
$a1 - > P1 = 1; // Assignment of non-existent attribute names calls _set() and passes "p1" and "1"
$a1->p2 = 2;
$a1->ac = 'avc';
Echo "
outputs the values of these"nonexistent attributes"; Echo "< br /> A1 - > p1:" $A1 - > p1; // the value of a non-existent attribute name is called at this time _get(), and passed to "p1" echo "
a1->p2:" . $a1->p2; echo "
a1->ac:" . $a1->ac; // Here's a demonstration of isset's judgement of non-existent attributes $v1 = isset ($a1 - > p1); // Existence $v2 = isset ($a1 - > ppp1); // nonexistent var_dump($v1); echo "
"; var_dump($v2); ?>

Результаты операции:

Выведите значения этих “несуществующих атрибутов” a1->p1:1 a1->p2:2 a1->ac:avc логическое значение true логическое значение false

_ НЕ УСТАНОВЛЕНО (имя атрибута$)

Когда атрибут не существует для объекта unset() При уничтожении автоматически вызываются внутренние методы: unset() ;

prop_list[$p] = $v;
  }
  function __get($p){
    if($this->prop_list[$p]){
      return $this->prop_list[$p];
    }else{
      Return "This property does not exist! ";
    }
  }
  function __unset($prop){
    unset($this->prop_list[$prop]);
  }
}
$a1 = new A();
$a1 - > P1 = 1; // Assignment of non-existent attribute names calls _set() and passes "p1" and "1"
Echo "< br /> A1 - > p1:" $A1 - > p1; // the value of a non-existent attribute name is called at this time _get(), and passed to "p1"
// Here's a demonstration of unset destroying a non-existent property
unset($a1->p1);
echo "
a1->p1:" . $a1->p1; ?>

Результаты заключаются в следующем:

a1->p1:1 A1 – > p1: Это свойство не существует!

В следующем примере объявите класс Person и установите для всех свойств членов значение private. Добавьте пользовательский в класс” __isset() “и” __unset() ” Два метода. Используйте вне класса” установлено() “и” снято() ” Эти два метода вызываются автоматически при использовании функции. Код выглядит следующим образом:

name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  Private function _isset ($propertyName) {// Requires a parameter, which is the name of the private attribute determined
    if($propertyName == 'name'){
      Return false; // Return false, not allowing the name attribute to be determined outside the class
    }
    Return isset ($this - > $propertyName); // Here propertyName needs to add a $character, because this is a parameter, not an attribute
  }
  private function __unset($propertyName){
    if($propertyName == 'name')
      Return; // Exit method, which does not allow deletion of the name attribute in the object
    Unset ($this - > $propertyName); // Here propertyName is added with a $character
  }
  public function say(){
    Echo: "Name:" $this - > name. ", $this - > sex.", $this - > age. "
"; } } $person = new Person ("yeoman", "man", 23); Var_dump (isset ($person - > name); // output bool (false), not allowing the determination of name attribute Var_dump (isset ($person - > sex); // output bool (true), with sex private attributes Var_dump (isset ($person - > age); // output bool (true), with age private attributes Var_dump (isset ($person-> id)); // output bool (false), no ID attribute exists in the measured object Unset ($person - > name); // Delete the private attribute name, but it is not allowed to delete in _unset () Unset ($person - > sex); /// Delete the private property sex in the object successfully unset($person->age); Person - > say (); // The sex and age attributes in the object are deleted and output: name: yeoman, gender: age: ?>

Результаты операции:

логическое ложное логическое истинное логическое истинное логическое ложное Имя: йомен, пол: возраст:

Перегрузка

Когда вызывается метод экземпляра, который не существует для объекта, класс автоматически вызывается __call() Этот волшебный метод;

Когда вызывается статический метод, который не существует в классе, он автоматически вызывает метод в классе. __callstatic() Это волшебный трюк.

Пример: Прямой вызов несуществующих методов

 F1 (); // non-existent method
?>

Об ошибках будет сообщено. Содержание ошибок выглядит следующим образом:

Фатальная ошибка: Неперехваченная ошибка: Вызов неопределенного метода A::f1()

“Элегантное обращение” с вышеуказанной ошибкой:

 F1 (); // / nonexistent method, but processed
?>

Результаты заключаются в следующем:

Метод F1 () не существует!

Когда вызывается статический метод, который не существует в классе, он автоматически вызывает метод в классе. __callstatic() Это волшебный трюк. Аналогично описанной выше обработке.

Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы PHP и использования операторов, Краткое описание использования строк Php и данных php+mysql. Введение в библиотечные операции и Краткое описание общих навыков работы с базами данных на PHP

Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.