Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Добрый вечер! Подскажите правильно ли я обращаюсь к методам класса внутри класса (тяжела тема никак не вкурю) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. phpПсевдо-переменная $this доступна в том случае, когда метод был вызван в контексте объекта. $this является ссылкой на вызываемый объект. Обычно это тот объект, которому принадлежит вызванный метод, но может быть и другой объект, если метод был вызван статически из контекста другого объекта. отсюда Ну никак не переварю что хотели сказать этими словами а посему и $this не особо ясен Через месяц буду улыбаться с этого вопроса, а пока что нужна помощь. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2009, 19:32 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexey, $this в (НЕ статическом) методе класса содержит ссылку, на экземпляр (объект) класса, для которого метод вызван, в вашем случае это $obj ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2009, 19:35 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Anjey aka PM, А на примере можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2009, 19:37 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2009, 20:36 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexey Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2009, 21:43 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexeyAnjey aka PM, А на примере можно? Предположим у нас есть такой вот класс Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. bogus::z(3); - ошибка вызова нестатичного метода из статичного контекста (пока что выводит предупреждение и исполняет, в будущих версиях будет полноценной ошибкой) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. bogus::y(4); Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. var_dump(bogus::$a); - Fatal Error, обращение к переменной контекста инстанса из статичного контекста var_dump(bogus::$b); - int(2) $instance->z(3); Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. $instance->y(4); Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. var_dump($instance->a); - int(1) var_dump($instance->b); - попытка вызова статичной переменной из контекста инстанса, выдается предупреждение и исполнение продолжается, но поскольку переменной нет - выводится NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2009, 22:18 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
an0nym Спасибо за разъяснения. an0nym $instance->z(3); Код: plaintext 1. 2. Выдает ошибку Fatal error: Using $this when not in object context То к чему я пока что пришел (после 4 часов общения с мануалом) способы обращения к константам, свойствам, методам класса, внутри класса, из расширений класса, из-за пределов класса ДЛЯ ОБРАЩЕНИЯ (ДОСТУП) ИЗ-ЗА ПРЕДЕЛОВ КЛАССА К: Константам Код: plaintext Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. ДЛЯ ОБРАЩЕНИЯ (ДОСТУП) ВНУТРИ КЛАССА К: Константам Код: plaintext Код: plaintext 1. 2. 3. Код: plaintext 1. 2. Код: plaintext 1. Если существуют ещё какие либо варианты добавьте пожалуйста. ДЛЯ ОБРАЩЕНИЯ (ДОСТУП) К РОДИТЕЛЬСКОМУ КЛАССУ К: к константам Код: plaintext Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. 6. Что не понятно: 1) Как получить доступ к свойствам родительского класса не являющимися STATIC 2) Как получить доступ к константам, свойствам, методам дочерних классов из родительского - не знаю такое вообще бывает или нет, по логике не должно. PS Сори за длинный пост. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 05:52 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexeyan0nym$instance->z(3); Код: plaintext 1. 2. Выдает ошибку Fatal error: Using $this when not in object context Проверьте еще раз, вроде не должна быть ошибка. Впрочем это уже не сильно важно, вроде вы разобрались в целом. eualexeyТо к чему я пока что пришел (после 4 часов общения с мануалом) ... Интересно что если ВНУТРИ КЛАССА в МЕТОДЕ Х я получаю доступ через $this к членам класса , то обратиться к МЕТОДУ Х ИЗ-ЗА ПРЕДЕЛОВ класса можно только через объект Код: plaintext 1. $this в данном случае =&$obj, т. е. $this - это референс на instanceof(Class) $obj. Код: plaintext 1. 2. 3. 4. 5. 6. self:: по сути говорит "вызвать данный метод/проперти данного класса в данном контексте ", т. е. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. eualexey ДЛЯ ОБРАЩЕНИЯ (ДОСТУП) К РОДИТЕЛЬСКОМУ КЛАССУ К: к константам Код: plaintext Код: plaintext 1. 2. 3. 4. К контексту инстанса родителя из контекста инстанса ребенка доступа нет по той причине, что ребенок не наследует конкретный инстанс родителя, он наследует родителя в общем: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. С 3им способом надо быть осторожным. Если method() родителя overriden у ребенка, то $this->method() вызовет метод ребенка, а не родителя. Плюс к этому, если вызовется все таки метод родителя, то $this будет указывать на инстанс ребенка. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 1) Как получить доступ к свойствам родительского класса не являющимися STATIC 2) Как получить доступ к константам, свойствам, методам дочерних классов из родительского - не знаю такое вообще бывает или нет, по логике не должно. PS Сори за длинный пост. 1. $this->метод_родителя(), если он не overriden у ребенка, но надо быть осторожным с использованием $this в самом методе_родителя() - выше описано почему. 2. Правильно, по логике не должно и не бывает (можно, конечно, самому костылей наставить, но это неправильно с точки зрения архитектуры и затратно с точки зрения дальнейшей поддержки таких классов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 08:14 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
an0nym, Мозг взорван. an0nymК контексту инстанса родителя из контекста инстанса ребенка доступа нет по той причине, что ребенок не наследует конкретный инстанс родителя, он наследует родителя в общем: Комбинация этих слов к сожалению для меня загадка. Как я понял (под инстансом подразумевается в переводе на русский - экзмепляр) К данным (под которыми подразумеваются: константы, свойства, методы) в классе родителя из класса-потомка доступа нет потому что ......(дальше ума не приложу) слишком специализированно.... Можно более простым языком? и вот тут an0nym$this в данном случае =&$obj, т. е. $this - это референс на instanceof(Class) $obj.PS an0nymself:: и parent:: не совсем то же самое, что статичный вызов имя_класса:: - это "магические" keyword'ы тут я не нашел что они "магические". В данном случае под "магическими" подразумевалось то что они особенные или то что они действительно обладают тем же функционалом что магические функции? Тяжело тема идет, но интересная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 11:33 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexeyКомбинация этих слов к сожалению для меня загадка. Как я понял (под инстансом подразумевается в переводе на русский - экзмепляр) К данным (под которыми подразумеваются: константы, свойства, методы) в классе родителя из класса-потомка доступа нет потому что ......(дальше ума не приложу) слишком специализированно.... Можно более простым языком? Да, инстансом я экземпляр называю. Мануалы на русском давно не читал. :) При вызове class::method() - конкретный экземпляр класса не подразумевается, это статичный контекст. При вызове $instance=new class(); $instance->method() - идет вызов метода экземпляра $instance, не статичный контекст. Если class - это наследник другого класса parent_class, то $instance=new class(); создает экземпляр только class, но не parent_class. Т. е. при вызове $instance->method() у нас нет экземпляра parent_class, а значит и обратиться к parent_class мы можем только статично. eualexey и вот тут an0nym$this в данном случае =&$obj, т. е. $this - это референс на instanceof(Class) $obj.PS an0nymself:: и parent:: не совсем то же самое, что статичный вызов имя_класса:: - это "магические" keyword'ы тут я не нашел что они "магические". В данном случае под "магическими" подразумевалось то что они особенные или то что они действительно обладают тем же функционалом что магические функции? Тяжело тема идет, но интересная. Просто то что они особенные, отличные от простого статичного вызова имя_класса::метод_или_свойство. По ссылке "магические" методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 11:54 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexeyи вот тут an0nym$this в данном случае =&$obj, т. е. $this - это референс на instanceof(Class) $obj. $this - это всего лишь ссылка (reference) на экземпляр, который вызвал метод. Если метод вызван статично - значит экземпляра нет, значит $this тоже нет, что часто (или всегда) приводит к Fatal Error. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 11:57 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
an0nym, Что то я никак ума не приложу как обратиться в следующем случае Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 18:04 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
а ниче что этой переменной после выхода из функции уж не будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 18:05 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Извините не понял вопроса. Может не ясно изложил суть вопроса, ниже более подробно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 18:49 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Приешл к тому что как обычно сделал в методе return который возвращает нужную переменную после прохождения ряда условий и все. и все же интересно можно ли обратиться любой переменной метода в том же классе из другого метода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 19:59 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Можно, если это свойство класса (читай переменная класса) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 20:20 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
qaqaqa88, так в том что и дело что если это свойство класса то оно объявляется вне метода. а меня интересует если переменная является НЕ свойством ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 20:22 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexey, нельзя конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 20:39 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
phpTeach, спасибо. именно то что хотел знать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2009, 22:05 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Уже доброе утро! Можно ли вызывать внутри класса свойства, методы другого класса? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2009, 05:13 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexey, родителя - parent::$property/parent::method() статично - имя_нужного_класса::$property/имя_нужного_класса::method() в контексте экземпляра - если заранее не передать конкретный экземпляр нужного класса, то нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2009, 09:06 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Столкнулся вот с такой ситуацией Код: plaintext 1. 2. 3. 4. В данном случае получается что свойство $a у нас будет принадлежать объекту, сколько пользователей создали экземпляров класса в текущий момент (он же просто объект) метод y() - един на всех, т.к. принадлежит классу, т.е. чтобы не было "напиханов" в метод y - оно будет единым для ВСЕХ пользователей. Выше то как я понимаю static от НЕ static. Как тогда обратиться к свойству $a из метода y или это нонсенс? Если я где не прав поправьте пожалуйста. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2009, 02:57 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
eualexey, метод y() у вас статический! нельзя внутри статического метода обращаться к внутренним переменным класса($this->) объявленным как не статические. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2009, 05:12 |
|
||
|
(PHP) обращение внутри класса
|
|||
|---|---|---|---|
|
#18+
Товарищи, такой вопрос: как обратиться внутри класса, к методам другого класса? Код: php 1. 2. 3. 4. 5. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Если так Код: php 1. 2. 3. то ругается Fatal error: Call to a member function t1() on a non-object in test.php on line 16 (эта строка $object->A->t1();) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 00:15 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=36056427&tid=1461801]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 399ms |

| 0 / 0 |
