J1upuk
24.07.2013 - 02:16
<?php
class A{
public $n;
function __set($n, $v){
$this->n = $v;
}
}
$obj = new A;
$obj->name = 'John';
echo $obj->n;
$obj2 = new A;
echo $obj2->n;
?>
Результат выполнения: John. Почему так? Ведь метод __set в свойство $n класса А присвоил значение John, а $obj2 уже создался по обновлённому классу, в котором уже $n = 'John'. Результат должен быть такой: JohnJohn. Или я что-то не так понимаю? Может __set присваивает только конкретному созданному объекту значение, а класс никак не меняется?
Вы создали два обекта в памяти.
В первом случaии Вы присвоили переменной name ='John'
Во втором случаи Вы ничего не сделали кроме как создали эксземпляр класса.
Если хотите чтобы свойство сохранилось делайте эта через статику.
J1upuk
24.07.2013 - 02:35
Цитата (Oyeme @ 24.07.2013 - 02:32) |
Вы создали два обекта в памяти.
В первом случaии Вы присвоили переменной name ='John' Во втором случаи Вы ничего не сделали кроме как создали эксземпляр класса.
Если хотите чтобы свойство сохранилось делайте эта через статику. |
ну я дописал static свойству $n, всё равно 1 раз выводит John
Я похоже чего то фундаментального непонял)
Ведь второй объект создался уже по изменённому методом __set классу, и там в свойстве уже лежит значение.
Цитата (J1upuk @ 23.07.2013 - 22:35) |
Цитата (Oyeme @ 24.07.2013 - 02:32) | Вы создали два обекта в памяти.
В первом случaии Вы присвоили переменной name ='John' Во втором случаи Вы ничего не сделали кроме как создали эксземпляр класса.
Если хотите чтобы свойство сохранилось делайте эта через статику. |
ну я дописал static свойству $n, всё равно 1 раз выводит John
Я похоже чего то фундаментального непонял)
Ведь второй объект создался уже по изменённому методом __set классу, и там в свойстве уже лежит значение.
|
При использовании статики Вам не нужно создавать экземпляр класса.
http://php.net/manual/en/language.oop5.static.php
J1upuk
24.07.2013 - 02:54
Цитата (Oyeme @ 24.07.2013 - 02:52) |
Цитата (J1upuk @ 23.07.2013 - 22:35) | Цитата (Oyeme @ 24.07.2013 - 02:32) | Вы создали два обекта в памяти.
В первом случaии Вы присвоили переменной name ='John' Во втором случаи Вы ничего не сделали кроме как создали эксземпляр класса.
Если хотите чтобы свойство сохранилось делайте эта через статику. |
ну я дописал static свойству $n, всё равно 1 раз выводит John
Я похоже чего то фундаментального непонял)
Ведь второй объект создался уже по изменённому методом __set классу, и там в свойстве уже лежит значение.
|
При использовании статики Вам не нужно создавать экземпляр класса. http://php.net/manual/en/language.oop5.static.php |
Кажется начинаю понимать, я создаю второй объект класса с теми же методами и свойствами, а сам класс не меняется, это просто как заготовка по которой создаётся объект, да? И все изменения и присваивания работают только в конкретном объекте, так?
Цитата (J1upuk @ 23.07.2013 - 22:54) |
Цитата (Oyeme @ 24.07.2013 - 02:52) | Цитата (J1upuk @ 23.07.2013 - 22:35) | Цитата (Oyeme @ 24.07.2013 - 02:32) | Вы создали два обекта в памяти.
В первом случaии Вы присвоили переменной name ='John' Во втором случаи Вы ничего не сделали кроме как создали эксземпляр класса.
Если хотите чтобы свойство сохранилось делайте эта через статику. |
ну я дописал static свойству $n, всё равно 1 раз выводит John
Я похоже чего то фундаментального непонял)
Ведь второй объект создался уже по изменённому методом __set классу, и там в свойстве уже лежит значение.
|
При использовании статики Вам не нужно создавать экземпляр класса. http://php.net/manual/en/language.oop5.static.php |
Кажется начинаю понимать, я создаю второй объект класса с теми же методами и свойствами, а сам класс не меняется, это просто как заготовка по которой создаётся объект, да? И все изменения и присваивания работают только в конкретном объекте, так?
|
Вам ну нужно создавать экземпляр класса.
Цитата |
Declaring class properties or methods as static makes them accessible without needing an instantiation of the class. A property declared as static can not be accessed with an instantiated class object (though a static method can). |
J1upuk
24.07.2013 - 03:24
Всё, автор херня, тема нуб, всё встало на свои места)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.