2016-11-16 2 views
1

Я унаследовал проект php, который ранее был назначен другой компании-разработчику, и я часто вижу очень странные реализации кода, которые я никогда раньше не видел и которые, я думаю, являются, вероятно, ошибками. Тем не менее, они повсюду, и журналы сервера не жалуются на них или не бросают предупреждения. Возможно, что error_reporting где-то отключен.Синтаксис для объявлений нового класса в PHP

Например, я вижу много объявлений классов, как это:

$registration = new EventRegistration; 

Это странно для меня, так как я только когда-либо видел класса Instancing используя new сделано как:

$registration = new EventRegistration(); 

Может ли кто-нибудь уточнить, если это неверно/не рекомендуется?

Я предполагаю, что это просто синтаксическая ошибка, которая будет компилироваться, но технически неверна. Что-то похожее на то, когда люди делают синтаксис массива вроде $array[key] вместо $array['key']. Это верно?

Спасибо.

+2

Нет, это не ошибка или предупреждение или технически неправильно, скобки необходимы только в том случае, если есть какие-либо аргументы, которые нуждаются в передаче конструктору класса. –

+0

Хорошо, я понимаю, почему это не понадобится без каких-либо конструкторов args , – DrewT

ответ

1

С ключевым словом new вы хотите создать новый объект, если для этого объекта не требуются какие-либо аргументы (как определено в методе __construct()), его совершенно штраф не учитывает ().

class foo{ 
    function __construct(){} 
} // valid 

class bar{ 
    function __construct($arg = null){} 
} // valid 

class foobar{ 
    function __construct($arg){} 
} // not valid 

В этом случае, только foobar вызовет предупреждение, если не проходит никакого арга. Это вопрос предпочтения, который я бы сказал.

Но для $array[key] скажет, что key является константой и, скорее всего, вызывает предупреждение.

+0

Да, это правда, хотя '$ array [key]' будет скомпилировать его, выдаст предупреждение с включенным сообщением об ошибках. Это не хороший синтаксис, но я видел его в другом месте проекта. Спасибо за примеры конструкторов, я понимаю, что сейчас. – DrewT

+0

Поскольку PHP может принимать (читать предупреждение), не означает его права. – Xorifelse

+0

Да, я знаю, что это некорректно, хотя проходит, поэтому я также хотел проверить объявления классов. В этом проекте нужно многое изменить xD – DrewT

Смежные вопросы