PHP5 — это язык, обладающий большинством функций объектно-ориентированного языка. Он имеет гораздо больше объектно-ориентированных функций, чем PHP4, но некоторые концепции немного запутаны, поэтому я буду говорить об этом сегодня. Пожалуйста, простите меня, эксперты (Чтобы прочитать эту статью, вам необходимо разобраться в объектно-ориентированных знаниях PHP5)
Во-первых, давайте поймем три приведенных выше ключевых слова: это, self, родительский элемент, который легче понять буквально, относится. к этому, сам, отец, хаха, это веселее, давайте сначала определимся с несколькими понятиями. Где используются эти три ключевых слова? Давайте кратко объясним, что это указатель на текущий объект (давайте воспользуемся указателем в C для просмотра). it), а self — указатель на текущий объект, родительский — указатель на родительский класс. Мы часто используем здесь указатели, потому что лучшего языка для этого не существует. Ха-ха, я плохо выучил китайский. -_-#
Если вам это не совсем понятно, давайте поговорим об этом на реальных примерах.
(1) это
1 <?php
2
Имя пользователя 3 класса
4 {
5 //Определение атрибутов
6 личное $имя;
7
8 //Определить конструктор
9 функция __construct($name)
10 {
11 $this->name = $name //Этот указатель использовался здесь;
12}
13
14 //Деструктор
15 функция __destruct(){}
16
17 //Распечатываем функцию-член имени пользователя
18 функция printName()
19 {
20 print($this->name); //Этот указатель используется снова
двадцать один }
двадцать два }
двадцать три
24 //создание экземпляра объекта
25 $nameObject = новое имя пользователя("heiyeluren");
26
27 //Выполняем печать
28 $nameObject->printName(); //Вывод: heiyeluren
29
30 //Второе создание объекта
31 $nameObject2 = новое имя пользователя("PHP5");
32
33 //Выполняем печать
34 $nameObject2->printName(); //Вывод: PHP5;
35 ?>
Давайте посмотрим, что приведенный выше класс использует этот указатель в строках 11 и 20 соответственно, так на кого он указывает в этот момент? Фактически, это определяет, на кого он указывает при создании экземпляра. Например, когда экземпляр объекта создается впервые (строка 25), это указывает на объект $nameObject. Затем при печати в строке 18 print( $this. -><name) становится print($nameObject->name), тогда, конечно, выводится «heiyeluren». Во втором случае print( $this->name ) становится print( $nameObject2->name ), поэтому выводится «PHP5». Следовательно, это указатель на текущий экземпляр объекта и не указывает ни на какой другой объект или класс.
(2)self
Прежде всего, мы должны прояснить, что self указывает на сам класс, то есть self не указывает на какой-либо экземпляр объекта. Обычно self используется для указания на статические переменные в классе.
1 <?php
2
3 класс Счетчик
4 {
5 //Определение свойств, включая статическую переменную
6 частный статический $firstCount = 0;
7 частных $lastCount;
8
9 //Конструктор
10 функция __construct()
11 {
12 $this->lastCount = ++selft::$firstCount; //Используйте self для вызова статических переменных. При вызове self вы должны использовать:: (символ операции с полем).
13}
14
15 //Распечатываем последнее значение
16 функция printLastCount()
17 {
18 печать ($this->lastCount);
19}
20}
двадцать один
22 //создание экземпляра объекта
23 $countObject = новый счетчик();
двадцать четыре
25 $countObject->printLastCount(); //Вывод 1
26
27 ?>
Здесь нам нужно обратить внимание только на два места: строку 6 и строку 12. Мы определили статическую переменную $firstCount во второй строке, и ее начальное значение равно 0. Затем мы вызвали это значение в строке 12, используя self для вызова и используя "::" для соединения в середине, что мы и сделали. вызов оператора домена, то в этот момент мы вызываем статическую переменную $frestCount, определенную самим классом. Наша статическая переменная не имеет ничего общего с экземпляром следующего объекта, она связана только с классом, и тогда, если я позвоню. сам класс, то мы не можем использовать this для ссылки, вы можете использовать self для ссылки, потому что self указывает на сам класс и не имеет ничего общего с каким-либо экземпляром объекта. Другими словами, если в нашем классе есть статические члены, мы также должны использовать self для их вызова.
(3) родитель
Мы знаем, что родительский класс является указателем на родительский класс. Обычно мы используем родительский элемент для вызова конструктора родительского класса.
1 <?php
2
3 //базовый класс
4 класса Животное
5 {
6 //Атрибуты базового класса
7 публичное $имя; //имя;
8
9 //Конструктор базового класса
10 публичная функция __construct($name)
11 {
12 $this->name = $name;
13}
14}
15
16 // Производный класс
17 класс Person расширяет Animal //Класс Person наследует класс Animal
18 {
19 публичный $personSex //Пол;
20 общедоступных $personAge //Возраст;
двадцать один
22 //Конструктор унаследованного класса
23 функция __construct($personSex, $personAge)
двадцать четыре {
25 родитель::__construct( "heiyeluren"); //Используйте родительский элемент для вызова конструктора родительского класса
26 $this->personSex = $personSex;
27 $this->personAge = $personAge;
28 }
29
30 функций printPerson()
31 {
32 print( $this->name. " is " .$this->personSex. ",в этом году " .$this->personAge );
33}
34}
35
36 //Создаем экземпляр объекта Person
37 $personObject = новый человек("мужчина", "21");
38
39 //Выполняем печать
40 $personObject->printPerson() //Вывод: heiyeluren — мужчина, в этом году 21 год;
41
42?>
Мы обращаем внимание на следующие детали: все атрибуты членов являются общедоступными, особенно атрибуты родительского класса, для доступа унаследованных классов через это. Мы обращаем внимание на ключевой момент, строку 25: родитель::__construct( "heiyeluren" ). На данный момент мы используем родительский элемент для вызова конструктора родительского класса для инициализации родительского класса, поскольку членами родительского класса являются члены родительского класса. все общедоступно. Таким образом, мы можем напрямую использовать это для вызова унаследованного класса.
Краткое описание:
это указатель на экземпляр объекта, self — ссылка на сам класс, а родитель — ссылка на родительский класс.
В принципе, это все, что я знаю. Должно быть, есть какие-то недоразумения. Пожалуйста, укажите на них!
Моя электронная почта: [email protected]
WriteTime: 3 ноября 2004 г., 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html