Строгие стандарты PHP: это плохо? - PullRequest
5 голосов
/ 21 июля 2011

Когда я создаю стандартный класс, я обычно делаю:

$test = null;
$test->id = 1;
$test->name = 'name';

Однако в строгом режиме я получаю сообщение об ошибке.

Так что, очевидно, правильный способ сделать это:

$test = new stdClass();
$test->id = 1;
$test->name = 'name';

Вот мне и интересно:

Разве нельзя делать: 1011 * делать то, что я хочу?

Что мы получаем, соблюдая строгие стандарты? Это гарантирует, что код продолжит работать в будущих версиях? Будет ли это лучше обратно совместимо? Это просто вопрос лучшей практики? Что-то еще?

EDIT опечатка

Ответы [ 6 ]

11 голосов
/ 21 июля 2011

Это большое нет-нет, чтобы сделать: $ test = null;делать то, что я хочу?

Да.

Это разрешено, потому что PHP свободен, но включение строгого режима дает вам правду о Боге.

Что мы получаем, соблюдая строгие стандарты?Это гарантирует, что код продолжит работать в будущих версиях?Будет ли это лучше обратно совместимо?Это просто вопрос передовой практики?

Да.

Что-то еще?

Это верно .

4 голосов
/ 21 июля 2011

null не является объектом. По сути, вы делаете:

$test = 'this is not an object';
$test->suddenly_it_is_an_object = true;

... а вы удивляетесь, почему вы получаете предупреждения?

3 голосов
/ 21 июля 2011

Используя это:

$test = null;

Вы не даете понять (как движку PHP, так и людям, которые будут читать ваш код) , что $test - это объект.


Таким образом, читателю не кажется естественным позднее узнать, что $test используется в качестве объекта - что означает , что ваш код менее удобен , чем когда вы явно объявляете $test как объект.

1 голос
/ 21 июля 2011

Вы можете привести что-то к объекту, например так:

$object = (object) array(
    'id' => 5,
    'name' => 'Darsstar',
    'key' => 'value',
);

Но новый StdClass () по-прежнему остается самым строгим способом сделать это.Хотя у меня такое чувство, что вы хотите, чтобы ошибка исчезла, и вам может понравиться этот синтаксис.

1 голос
/ 21 июля 2011

Если у вас есть привычка правильно объявлять ваши объекты с помощью $test = new stdClass();, то, увидев эту ошибку строгого режима, вы поймаете неявные ошибки объявления переменных, которые PHP любит выдавать, когда вы случайно набираете $usr для * 1003.* и тому подобное, избавляя вас от бессмысленных головных болей.

1 голос
/ 21 июля 2011

Очень плохо делать и читать, что = null; идет со стандартом new ...;

...