[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск неизвестного свойства функцией __set()
romantik2011

class A{
public $user;

function __set($n,$v){
$this->user[$n] = $v;
}
function __get($n){
return $this->user[$n];
}
}


$o = new A();
$o->name = "John";
echo $o->name;


Цитата
Результат: John

Когда интепретатор PHP увидел в коде что мы обращаемся к неизвестному свойству, он обратился в класс, с надеждой найти функцию __set()
Эта функция имеет 2 параметра: 01)Название свойства; 02)Значение свойства.

В этом месте кода, как переменная $user, которая была объявлена как приватное свойство в классе, как она могла превратится в массив если она была объявлена как обычное закрытое свойство?

function __set($n,$v){
$this->user[$n] = $v;
}

В этом месте кода, если функция __get() вызывается только в том случаи когда была вызвана функция __set() и в функцию __get()
передаётся значение свойства, то значение, которое попало в __set(). Как снова туда может лететь массив ,если функция ГЭТ принимает только свойство класса?

function __get($n){
return $this->user[$n];
}




Спустя 12 минут, 31 секунда (3.08.2011 - 16:46) neadekvat написал(а):
А у меня мозг сломался. Я так и не понял, в чем вопрос.

Спустя 6 минут, 35 секунд (3.08.2011 - 16:53) romantik2011 написал(а):
То есть получается переопределили переменную с неизвестного типа public $user; переопределили в массив внутри функции __set()?

Спустя 2 минуты, 33 секунды (3.08.2011 - 16:55) neadekvat написал(а):
romantik2011, для тебя открытие, что в php динамическая типизация?

Спустя 2 минуты, 49 секунд (3.08.2011 - 16:58) romantik2011 написал(а):
Попробовал сделать вот так, такое не сработало, тоже переопределить захотел.

$u = 5;
$m = "Салат";
echo $m[$u];


Сработало только вот так:

$u = 5;
$m = "Салат";
$m[$u] = $u;
echo $m[$u];


Почему? Разве так правильно писать $m[$u] = $u;?

Спустя 8 минут, 7 секунд (3.08.2011 - 17:06) mako написал(а):
Цитата
В этом месте кода, как переменная $user, которая была объявлена как приватное свойство в классе


Вроде же как паблик обьявлена -делай с ней что хочешь.
Ты уверен что функция __set здесь вызываеться при изменении $name?

Спустя 3 минуты, 57 секунд (3.08.2011 - 17:10) neadekvat написал(а):
romantik2011, стоп.
Менять тип можно при присовении значения. А при выводе то как - что он выводит будет? Что он должен был вывести в первом случаи?

Спустя 1 час, 16 минут, 17 секунд (3.08.2011 - 18:26) romantik2011 написал(а):
Всё спасибо, прочитал про динамическую типизацию, всё понял. Всем спасибо.

Спустя 12 часов, 55 минут, 36 секунд (4.08.2011 - 07:22) linker написал(а):
Про это надо было читать ещё прежде чем садиться писать какой-либо код, тем более ООП.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.