X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Поиск неизвестного свойства функцией __set()
romantik2011
romantik2011
Topic Starter сообщение 3.8.2011, 17:30; Ответить: romantik2011
Сообщение #1


[PHP]
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;
[/PHP]

Результат: John

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

В этом месте кода, как переменная $user, которая была объявлена как приватное свойство в классе, как она могла превратится в массив если она была объявлена как обычное закрытое свойство?
[PHP]
function __set($n,$v){
$this->user[$n] = $v;
}
[/PHP]
В этом месте кода, если функция __get() вызывается только в том случаи когда была вызвана функция __set() и в функцию __get()
передаётся значение свойства, то значение, которое попало в __set(). Как снова туда может лететь массив ,если функция ГЭТ принимает только свойство класса?
[PHP]
function __get($n){
return $this->user[$n];
}
[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 3.8.2011, 17:40; Ответить: Letmetouchyou
Сообщение #2


Что за бред.

(romantik2011 @ 3.8.2011, 20:30) *
В этом месте кода, как переменная $user, которая была объявлена как приватное свойство в классе, как она могла превратится в массив если она была объявлена как обычное закрытое свойство?

PHP является языком программирования с динамической типизацией



(romantik2011 @ 3.8.2011, 20:30) *
функция __get() вызывается только в том случаи когда была вызвана функция __set() и в функцию __get()
передаётся значение свойства, то значение, которое попало в __set()

вы сами поняличто сказали?
А если логично подумать? __set вызываетсяь когда идет запись в неизвестную перменную
__get - соответсвенно когда чтение.


(romantik2011 @ 3.8.2011, 20:30) *
Как снова туда может лететь массив ,если функция ГЭТ принимает только свойство класса?

ну тут без коминтариев)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
romantik2011
romantik2011
Topic Starter сообщение 3.8.2011, 17:52; Ответить: romantik2011
Сообщение #3


То есть получается переопределили переменную с неизвестного типа public $user; переопределили в массив внутри функции __set()?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 3.8.2011, 17:56; Ответить: alexdrob
Сообщение #4


да, но вы должны получить нотик, что было переопределение в массив, по этому так делать не хорошо, нужно сразу указывать что это массив.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
romantik2011
romantik2011
Topic Starter сообщение 3.8.2011, 17:58; Ответить: romantik2011
Сообщение #5


Попробовал сделать вот так, такое не сработало, тоже переопределить захотел.
[PHP]
$u = 5;
$m = "Салат";
echo $m[$u];
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 3.8.2011, 18:09; Ответить: alexdrob
Сообщение #6


(romantik2011 @ 3.8.2011, 20:58) *
Попробовал сделать вот так, такое не сработало, тоже переопределить захотел.

а вы вот сами можете словами объяснить что ваш код должен был сделать?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 3.8.2011, 18:16; Ответить: Letmetouchyou
Сообщение #7


romantik2011, зачем вы учите ООП, если не знаете основ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
romantik2011
romantik2011
Topic Starter сообщение 3.8.2011, 18:21; Ответить: romantik2011
Сообщение #8


Сработало только вот так:
[php]
$u = 5;
$m = "Салат";
$m[$u] = $u;
echo $m[$u];
[/php]

Почему? Разве так правильно писать $m[$u] = $u;?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 3.8.2011, 18:32; Ответить: alexdrob
Сообщение #9


(romantik2011 @ 3.8.2011, 21:21) *
Почему? Разве так правильно писать $m[$u] = $u;?

омг, да пишите как хотите, может и так когда то понадобится, но нужно понимать зачем вы так написали а не подругому, это же вы код придумали, значит он вам зачем то нужен :)

и прислушайтесь к совету Letmetouchyou, какой смысл учить ооп, если вы вообще не понимаете работы с переменными.

вы должны научится составлять алгоритмы просто блок схемами, своими словами описать. а потом в код переводить. а так вы просто так взяли, что то написали, не понимая зачем, и спрашиваете, "а почему я так написал? это правильно?"
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
romantik2011
romantik2011
Topic Starter сообщение 3.8.2011, 19:26; Ответить: romantik2011
Сообщение #10


Всё спасибо, прочитал про динамическую типизацию, всё понял. Всем спасибо.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Smmsearch.net - поиск самой дешевой накрутки в социальных сетях.
0 Professor7717 3271 13.8.2021, 19:53
автор: Professor7717
Открытая тема (нет новых ответов) Поиск кодера в команду. PHP, Pyton. На постоянку.
7 getsend_mw 2808 3.2.2021, 21:15
автор: getsend_mw
Открытая тема (нет новых ответов) Поиск копирайтера на игровую тематику
Поиск копирайтера на игровую тематику
4 a1ex777 1627 2.10.2020, 16:01
автор: AndreyBozhenko
Открытая тема (нет новых ответов) SmmBox - поиск, аналитика и отложенная публикация в соцсетях. Официально!
23 smmbox 11860 13.5.2020, 11:12
автор: smmbox
Открытая тема (нет новых ответов) Поиск, сбор информации, парсинг (недорого)
Предлагаю услуги по поиску, сбору информации, парсингу и т.д.
0 Kabardin 1334 11.3.2020, 14:59
автор: Kabardin


 



RSS Текстовая версия Сейчас: 29.3.2024, 17:08
Дизайн