Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск неизвестного свойства функцией __set() 
:(
    Опции темы
romantik2011
Дата 3.8.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 20.7.2011

Репутация: нет
Всего: нет



Код

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];
    }

PM MAIL   Вверх
нуп
Дата 3.8.2011, 17:08 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Вы не объявили $user как массив. $o->name = "John"; не найдено в классе, и просто добавит name как свойство класса
PM MAIL   Вверх
skyboy
Дата 4.8.2011, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(romantik2011 @  3.8.2011,  15:36 Найти цитируемый пост)
public $user;

Цитата(romantik2011 @  3.8.2011,  15:36 Найти цитируемый пост)
была объявлена как приватное свойство

где оно - приватное? на работу не влияет никак, но все ж никакое оно не приватное.
Цитата(romantik2011 @  3.8.2011,  15:36 Найти цитируемый пост)
как она могла превратится в массив

а вот так. РНР - динамически типизируемый язык.
неужели, не слышал?
Цитата(нуп @  3.8.2011,  16:08 Найти цитируемый пост)
не найдено в классе, и просто добавит name как свойство класса 

а __set просто для красоты?  smile 
Код

class A{
    public $user;
    
    function __set($n,$v){
        $this->user[$n] = $v;
    }
}
$o = new A();
$o->name = "John";
var_dump($o);

выводит
Цитата

object(A)#1 (1) {
  ["user"]=>
  array(1) {
    ["name"]=>
    string(3) "Amy"
  }
}

что недвусмысленно намекает, куда на самом деле записано name.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.