Помощник
|
В чем отличия указателя self от this? |
romantik2011
|
Сообщение
#1
|
||
|
|
||
|
|||
alexdrob |
27.7.2011, 21:07;
Ответить: alexdrob
Сообщение
#2
|
|
вот в прошлой теме, вы писали про полиморфизм
а вы там в лкассе А подставьте в функции Call вместо $this->Test() self::Test() будет большая разница) |
|
|
romantik2011
|
Сообщение
#3
|
|
Так можно обращаться к статическим методам и свойствам класса без ключевого слова SELF и всё равно интерпретатор не выдаёт ошибок.
будет большая разница) Ну и какая большая, какой эффект будет? |
|
|
Apay |
27.7.2011, 21:23;
Ответить: Apay
Сообщение
#4
|
|
|
|
|
alexdrob |
27.7.2011, 21:33;
Ответить: alexdrob
Сообщение
#5
|
|
self не только к статическим позволяет обратится.
Ну и какая большая, какой эффект будет? ну можно создать скрипт и увидеть своими глазами, так будет понятней. $this - будет ссылаться на тот объект который вызвал событие. self ссылается на текущий класс, в котором он находится. то есть [PHP]class A { // Выводит, функция какого класса была вызвана function Test() { echo "Test from A\n"; } // Тестовая функция — просто переадресует на Test() function Call() { $this->Test(); } } class B extends A { function Test() { echo "Test from B\n"; } } $a=new A(); $b=new B(); $a->Call(); // выводит "Test from A" $b->Test(); // выводит "Test from B" $b->Call(); // Внимание! Выводит "Test from B"! [/PHP] $b->Call - вызовет функцию B->Test хоть Call находится и в классе A а в коде ниже $b->Call - вызовет функцию A->Test, так как self в функции класс А укажет на класс А [PHP]class A { // Выводит, функция какого класса была вызвана function Test() { echo "Test from A\n"; } // Тестовая функция — просто переадресует на Test() function Call() { self::Test(); } } class B extends A { function Test() { echo "Test from B\n"; } } $a=new A(); $b=new B(); $a->Call(); // выводит "Test from A" $b->Test(); // выводит "Test from B" $b->Call(); // Внимание! Выводит "Test from A"![/PHP] |
|
|
ZhukV |
27.7.2011, 23:04;
Ответить: ZhukV
Сообщение
#6
|
|
При использовании self не возможно использовать ключевое слово $this
На практике, как оказалось, это достаточно нужная вещь. 1. Иногда нужно все втулить в одну кучу, сразу вариант -- использоания ООП + верного унаследования. Но грузить весь объект (в некоторых слачаях), ради использования одного методы? А если класс огромный? 2. Использования селфов никогда ни приведет к загрузке магических методов. 3. Работает как простая функция, тоесть в конце, память выбрасывается. 4. Используется внутри класса для использования констант задекларированых в этом же классе. Используя жесткие ссылки между методами класса, можно избавиться от клонирование готовых обектов. [PHP] class A{ funciton a(&$a){ return self::b($a); } function b(&$b){ return self::c($b); } function c(&$c){ return $c; } function __construct(){ exit('Error!!!'); } } A::a(111); [/PHP] С примера видно, что при явной загрузке класса, будет еррор. Используется как простые функции. |
|
|
alexdrob |
27.7.2011, 23:20;
Ответить: alexdrob
Сообщение
#7
|
|
|
|
|
ZhukV |
28.7.2011, 1:06;
Ответить: ZhukV
Сообщение
#8
|
|
Можно и не объявлять. Редукатов не будет при жестких ссылках.
|
|
|
alexdrob |
28.7.2011, 1:16;
Ответить: alexdrob
Сообщение
#9
|
|
|
[PHP]<?php
class A{ function a(&$a){ return self::b($a); } function b(&$b){ return self::c($b); } function c(&$c){ return $c; } function __construct(){ exit('Error!!!'); } } $a = 111; A::a($a);[/PHP] Fatal error: Non-static method A::a() cannot be called statically in D:\Apache\htdocs\1.php on line 11
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Чем принимать драм или доллар драм - национальная валюта Армении |
2 | GigArt | 1290 | 1.4.2022, 19:17 автор: GigArt |
|
Чем монетизировать посетителей без определенной тематики и широким гео? | 16 | Mansurka | 3082 | 11.7.2021, 15:25 автор: kuprum |
|
Чем просканировать файлы сайта на предмет бэкдоров? вдруг где-то внутри wp-includes шелл |
3 | coremission | 2148 | 7.6.2019, 12:41 автор: bekett |
|
Вечные ссылки в статьях дешевле чем на биржах. | 3 | byleonid | 2131 | 7.3.2019, 11:21 автор: Bizota |
|
Clicklead.ru — больше, чем cpa сеть! гемблинг, беттинг, финансы, нутра, дейтинг, WOW! | 4 | Clicklead_sf | 3386 | 20.1.2019, 21:53 автор: -Clicklead- |
Текстовая версия | Сейчас: 29.3.2024, 5:20 |