Заставьте PHP Object выполнять разные действия в зависимости от имени переменной - PullRequest
1 голос
/ 18 мая 2009

Например, если, скажем, у меня есть база данных пользователей. У меня есть класс, который получает информацию из базы данных об этих пользователях.

Я хочу сделать класс "самоосознающим" своего имени, например:

<?php

class UserData {

//[code that fetches the ID number from the variable name, and queries the database for info]

}

$user24 = new UserData;
echo 'Welcome, '.$user24->name.'!';

?>

Этот код, в идеале, будет выводить что-то вроде «Добро пожаловать, Боб!» И будет меняться в зависимости от того, как я его назвал. Это возможно?

Ответы [ 3 ]

6 голосов
/ 18 мая 2009

Поскольку данный объект может иметь несколько имен, это не является общепринятым методом в современных языках программирования. Например, предположив, что имя пользователя 25 отличается от имени пользователя 24, что вы ожидаете напечатать следующий код?

$user24 = new UserData;
echo 'Welcome, '.$user24->name.'!';
$user25 = $user24;
echo 'Welcome, '.$user25->name.'!';

Мало того, вы можете иметь объекты без имени:

echo 'Welcome, '.(new UserData)->name.'!';

В более типичной реализации конструктор объекта принимает параметр, который сообщает ему, с каким пользователем вы работаете, например:

$user = new UserData(24);
echo 'Welcome, '.$user->name.'!';
3 голосов
/ 18 мая 2009

Даже если это возможно (я так не думаю), вы не должны. Другие просто увидят много магии, и это будет трудно отладить. Всегда придерживайтесь стандартов и известных идей / шаблонов.

Почему вы не хотите использовать:

$user = new UserData(24);

Или даже лучше (потому что вы не должны делать никаких блокирующих операций в конструкторе):

$user = UserData::getById(24);
1 голос
/ 18 мая 2009

Отношение значения (такого как объект) к имени переменной является «один ко многим», то есть одно значение может иметь много имен, где каждое из них является ссылкой на одно и то же значение. У него может даже не быть имени вообще, т. Е. Это может быть выражение (например, новое выражение возвращает объект). Поэтому невозможно определить «имя» значения программно. Значение может иметь несколько имен или не иметь имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...