[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вызов класса по имени из статического свойства
Страницы: 1, 2
Barh
Здравствуйте, форумчане!


В свойстве Test::$db хранится название класса.

Есть такой код:
class Test
{
private static $db = 'DBRemote';
public static function testId()
{
$db = self::$db;
return $db::query();
}
}


Как упростить метод testId до 1 строки?
Zzepish

return (self::$db)::query();
Barh
Цитата (Zzepish @ 17.11.2014 - 02:00)
return (self::$db)::query();

Zzepish, Пробовал так, возникает ошибка:

Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)
Zzepish
Barh
хм. ну ладно) просто попытка (пальцем в небо)
sergeiss
Barh, используя "двойное двоеточие", ты можешь обращаться к статическим свойствам/методам этого класса, для которого идет вызов. В твоем случае $db - это переменная, инициализированная строкой. Откуда у нее метод query()??? Или query() - это метод текущего класса? Пока ты не ответишь на эти вопросы, не получится ответить на твой начальный вопрос.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
AllesKlar
sergeiss
Он передал в переменную $db имя класса, и теперь хочет вызвать статический метод этого класса.
$db:querty() => DBRemote::querty()

_____________
[продано копирайтерам]
Invis1ble
public static function testId()
{
return call_user_func(array(self::$db, 'query'));
}

но я бы не советовал

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

SlavaFr
Советую избавиться от статического метода query в DBRemote превратив его в обычный публичный метод oпределенного типа. Программирование не заключается в экономии одной строчки в методе.


class Test
{
/** @var DBRemote */
private $db = DBRemote;

/**
*
@param DBRemote $db
*/

public function __construct( DBRemote $db)
{
$this-db = $db;
}

public static function testId()
{
return $this->db->query();
}
}


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
vital
$$db::query();


_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Invis1ble
vital
ну ты бы хоть проверил, это ж синтаксическая ошибка

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

vital
Цитата (Invis1ble @ 21.11.2014 - 20:33)
vital
ну ты бы хоть проверил, это ж синтаксическая ошибка

Лень было smile.gif
Жалко. Могло бы и работать, так-то, было бы логично.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Arh
Цитата
Как упростить метод testId до 1 строки?


:lol:

class Test
{
private static $db = 'DBRemote';
public static function testId()
{
$db = self::$db; return $db::query();
}
}


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
sergeiss
Arh, +100500 user posted image

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
chee
Цитата (SlavaFr @ 21.11.2014 - 16:22)
Советую избавиться от статического метода query в DBRemote превратив его в обычный публичный метод oпределенного типа. Программирование не заключается в экономии одной строчки в методе.

+1

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
SlavaFr
Цитата
Советую избавиться от статического метода query в DBRemote превратив его в обычный публичный метод oпределенного типа
Чем обусловлен сей совет? Хотелось бы аргументов.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

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