|
|
|
|
|
для: neadekvat
(07.11.2009 в 20:56)
| | Как всегда, все гениальное - просто и без изобретения колеса... :-) Спасибо. | |
|
|
|
|
|
|
|
для: centnerik
(07.11.2009 в 19:38)
| | К членам класса (переменным, объявленным в классе), имеющим спецификатор доступа public, доступ открыт и никаких методов для их вывода не нужно.
К тем, что имеют доступ private и protected, доступ закрыт и напрямую к ним обратиться нельзя. Для этого и используется __get() (конечно, функция должна иметь доступ public)
<?php
class one {
public $variable = "Переменная";
}
$obj = new one;
echo $obj->variable; // выведет "Переменная"
|
<?php
class one {
// protected - почти private, но переменная становится доступной и для наследников класса
private $variable = "Переменная";
}
$obj = new one;
echo $obj->variable; // такой "маневр" закончится фатальной ошибкой
|
<?php
class one {
// protected - почти private, но переменная становится доступной и для наследников класса
private $variable= "Переменная";
public function __get($var) {
return $this->variable;
}
}
$obj = new one;
echo $obj->variable; // снова выведет "Переменная"
|
| |
|
|
|
|
|
|
|
для: neadekvat
(07.11.2009 в 18:56)
| | Примеры с ходу не приведу, особо РНР не увлекаюсь (время...), но я сейчас, отвечая на сообщения, немного разобрался с тем, что Вы говорили выше.
Получается, что
для защищенных переменных функция доступа вызывается автоматически и возвращает либо значение, либо ошибку.
Для public-переменных просто идет проверка на наличие переменной с таким именем в классе, и т.д.... Модификатор доступа не имеет никакого отношения к отображению переменных класса, например, используя echo.
Я Вас правильно понял ?
Насчет примера... Вы можете представить небольшые фрагменты кода, где можно было бы наглядно просмотреть обращение к защищенным и частным переменным экземпляра ? | |
|
|
|
|
|
|
|
для: centnerik
(07.11.2009 в 17:36)
| | Что-то я не совсем вас понимаю.
Приведите примеры кода (как идет обращение к защищенным членам класса) | |
|
|
|
|
|
|
|
для: neadekvat
(07.11.2009 в 17:16)
| | >т.е. будет являться рабочим методом класса
Возможно я не в том контексте использую этот метод, но интересен сам факт, что при закомментированном определении метода модификатор работает, а в противном случае обращение к переменной идет без явного указания метода. Или если он определен в классе, то вызывается автоматически ? | |
|
|
|
|
|
|
|
для: centnerik
(07.11.2009 в 16:58)
| | __get() перехватывает обращение к закрытым членам классам и возвращает их значение, прямое обращение к этой функции не нужно. Именно поэтому, если данная функция будет раскомментированна (т.е. будет являться рабочим методом класса), то значения должны и будут возвращаться. | |
|
|
|
|
 724 байт |
|
| Здравствуйте.
Объясните пожалуйста поведение скрипта (на скрепке).
Переменные класса обявлены как protected. Насколько я понимаю, для доступа к таким переменным необходим специальный метод и получить значение переменной можно только через этот метод, т. е. $somevar->__get('varName'). Но, если в приложенном к посту файле раскомментировать определение функции __get(), то, несмотря на модификатор protected, доступ к переменным можно получить обратившись как $somevar->varName.
Возможно это нормально, но есть сомнение, что что-то не так.
Заранее спасибо. | |
|
|
|
|