2015-02-23 2 views
0

Мне интересно, можно ли вызвать функции на строковых литералах (как на Python) в PHP (пробовал поиск по Google, но на 90% уверен, что моя терминология отключена).Функция вызова в строковом литерале

Пример питон:

"test,1,2,3".split() 

Я хочу, чтобы достичь чего-то вроде (в PHP коде псевдо):

$result = "SELECT `db`.`table`.`field` FROM `db`.`table` WHERE 1"->query(); 

В настоящее время я делаю это:

$result = MySql::query("SELECT `db`.`table`.`field` FROM `db`.`table` WHERE 1"); 

Но я на самом деле как простота среднего примера, и задавался вопросом, возможно ли что-то подобное в PHP, возможно, переопределив стринги PHP g класс?

+1

AFAIK там нет способа сделать это в PHP, поскольку строки не являются классами. – Mikk

+0

№ Строки в PHP - это просто байты. Чтобы вызвать метод на что-то, он должен быть объектом. Если вам нужен синтаксический сахар, то вы должны использовать язык, который его поддерживает. –

+0

Это может быть в надуманном будущем; https://github.com/nikic/scalar_objects – mario

ответ

3

Разница заключается в том, что все в Python (и аналогичные языки OO) является объектом, поэтому даже строки имеют «методы» и «свойства». PHP не является полным верхним языком OO, строки - это просто примитивные строки. Даже если бы они были объектами, строка, вероятно, не имела бы методов, относящихся к запросам базы данных, потому что это был бы довольно странный дизайн OO с чересчур смешанными обязанностями.

2

Там нет никакого реального способа сделать то, что вы говорите о

$result = "SELECT `db`.`table`.`field` FROM `db`.`table` WHERE 1"->query(); 

В этом примере, ваша строка это просто строка. Затем вы пытаетесь ссылаться на него как на объект. В этом случае вы получите ошибку Fatal, потому что вы говорите PHP, чтобы использовать объект, где он не существует.

Ближе всего к тому, что вы описали, прямую цепочку, где вы создаете экземпляр класса и ссылки на нее в том же заявлении (доступно в PHP >= 5.4)

$class = (new Class())->function(); 
Смежные вопросы