[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: __set
J1upuk

<?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 присваивает только конкретному созданному объекту значение, а класс никак не меняется?
Oyeme
Вы создали два обекта в памяти.

В первом случaии Вы присвоили переменной name ='John'
Во втором случаи Вы ничего не сделали кроме как создали эксземпляр класса.

Если хотите чтобы свойство сохранилось делайте эта через статику.

J1upuk
Цитата (Oyeme @ 24.07.2013 - 02:32)
Вы создали два обекта в памяти.

В первом случaии Вы присвоили переменной name ='John'
Во втором случаи Вы ничего не сделали  кроме как создали эксземпляр класса.

Если хотите чтобы свойство сохранилось делайте эта через статику.

ну я дописал static свойству $n, всё равно 1 раз выводит John

Я похоже чего то фундаментального непонял)

Ведь второй объект создался уже по изменённому методом __set классу, и там в свойстве уже лежит значение.
Oyeme
Цитата (J1upuk @ 23.07.2013 - 22:35)
Цитата (Oyeme @ 24.07.2013 - 02:32)
Вы создали два обекта в памяти.

В первом случaии Вы присвоили переменной name ='John'
Во втором случаи Вы ничего не сделали  кроме как создали эксземпляр класса.

Если хотите чтобы свойство сохранилось делайте эта через статику.

ну я дописал static свойству $n, всё равно 1 раз выводит John

Я похоже чего то фундаментального непонял)

Ведь второй объект создался уже по изменённому методом __set классу, и там в свойстве уже лежит значение.

При использовании статики Вам не нужно создавать экземпляр класса.
wink.gif

http://php.net/manual/en/language.oop5.static.php
J1upuk
Цитата (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 классу, и там в свойстве уже лежит значение.

При использовании статики Вам не нужно создавать экземпляр класса.
wink.gif

http://php.net/manual/en/language.oop5.static.php

Кажется начинаю понимать, я создаю второй объект класса с теми же методами и свойствами, а сам класс не меняется, это просто как заготовка по которой создаётся объект, да? И все изменения и присваивания работают только в конкретном объекте, так?
Oyeme
Цитата (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 классу, и там в свойстве уже лежит значение.

При использовании статики Вам не нужно создавать экземпляр класса.
wink.gif

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
Всё, автор херня, тема нуб, всё встало на свои места)
Быстрый ответ:

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