Где я могу найти определения строгих стандартов PHP

Все, что я когда-либо вижу в Строгих стандартах PHP, — это сообщения об ошибках, когда (ini_get('error_reporting') & E_STRICT) == true, Исправление этих ошибок способом, основанным на ошибках, кажется неоптимальным.

Поэтому для того, чтобы написать код, полностью совместимый со строгими стандартами PHP, я хотел бы прочитать, что в них определено. Где я могу найти строгие стандарты PHP?

Все поиски, которые я провел, приводят только к инструкциям о том, как исправить какую-то произвольную ошибку, о которой сообщают Строгие Стандарты, но не сами Строгие Стандарты. Может ли кто-нибудь предоставить ссылку?

0

Решение

Единственный способ узнать, где все возможности для E_STRICT быть выпущенным будет означать, чтобы источник поиска E_STRICT, В основном, посмотрите здесь на главную ветку: http://lxr.php.net/search?q=&DEFS =&рефов = E_STRICT&Путь = Зенд% 2F&истор =&Проект = PHP_TRUNK. Обратите внимание, что в некоторых случаях мастер может отличаться от конкретной версии тем, что E_STRICT ошибки возникают и когда.

Конечно, понять источник PHP было бы сложно без понимания C и некоторой общей терминологии внутренних компонентов.

8

Другие решения

Ниже приведен полный список возможных E_STRICT сообщения об ошибках в PHP 5.6 и связанные расширения (полученные из http://lxr.php.net/s?refs=E_STRICT&Проект = PHP_5_6) вместе с кратким примером кода, который их провоцирует.

В PHP 5.5 вызов любого mysql_* Функция также будет производить E_STRICTНачиная с PHP 5.6 он производит E_NOTICE,

Вероятно, есть другие места, которые испускают их в расширениях PECL, не стесняйтесь редактировать их здесь, если вы их найдете.


Доступ к статическому свойству ClassName :: $ propName как к статическому

class ClassName
{
public static $propName = 1;
}
$o = new ClassName;
echo $o->propName; // error here

Код ресурса # 1, используемый в качестве смещения, приведение к целому числу (1)

$fp = fopen('file.txt', 'r');
$array[$fp] = 'something'; // error here
// it's worth noting that an explicit cast to int has the same effect with no error:
$array[(int)$fp] = 'something'; //works

Нестатический метод ClassName :: methodName () не должен вызываться статически (может включать дополнительный текст: предполагается, что $ this из совместимого контекста OtherClassName)

class ClassName
{
public function methodName()
{
return 1;
}
}
echo ClassName::methodName(); // error here

Только переменные должны быть назначены по ссылке

function func()
{
return 1;
}
$var = &func(); // error here

Только переменные должны быть переданы по ссылке

function func(&$arg)
{
$arg = 1;
}
function func2()
{
return 0;
}
func(func2()); // error here

Статическая функция ClassName :: methodName () не должна быть абстрактной

abstract class ClassName
{
abstract public static function methodName(); // error here
}
class OtherClassName extends ClassName
{
public static function methodName()
{
return 1;
}
}

Переопределение уже определенного конструктора для класса ClassName

// Emitted when both a PHP4-style and PHP5-style constructor are declared in a class
class ClassName
{
public function ClassName($arg)
{
}
public function __construct($arg) // error here
{
}
}

Объявление ClassName :: methodName () должно быть совместимо с OtherClassName :: methodName ()

// Emitted when a class declaration violates the Liskov Substitution Principle
// http://en.wikipedia.org/wiki/Liskov_substitution_principle
class OtherClassName
{
public function methodName()
{
return 1;
}
}
class ClassName extends OtherClassName
{
public function methodName($arg) // error here
{
return $arg + 1;
}
}

Вместо этого вы должны использовать функцию time ()

// Emitted when calling mktime() with no arguments
$time = mktime(); // error here

Подстановка только базовых объектов поддерживается для многобайтовых кодировок, отличных от UTF-8; функциональность эквивалентна htmlspecialchars

// Emitted when using a multi-byte character set that is not UTF-8 with
// htmlentities and some related functions
echo htmlentities("<Stuff>", ENT_COMPAT | ENT_HTML401, '936'); // error here

Следующего набора результатов нет. Пожалуйста, вызовите mysqli_stmt_more_results () / mysqli_stmt :: more_results (), чтобы проверить, вызывать ли эту функцию / метод

// Emitted by mysqli_next_result() when there are no more results
do {
// stuff
} while (mysqli_next_result($link)); // error here
8

Не существует единого места, в котором перечислены все строгие ошибки, но я бы тоже не ожидал такого. Этот список будет огромный.

Что вы можете сделать, это искать E_STRICT уведомления. Распространенным местом, в котором будут перечислены эти списки, является список миграции, который выпускается при выпуске минорных версий PHP (т. Е. 5.X). Вот 5.4 список обратной несовместимости, который показывает, что имеет E_STRICT уведомления сейчас. Я думаю, что это лучшее, что вы можете получить.

0
По вопросам рекламы [email protected]