Все, что я когда-либо вижу в Строгих стандартах PHP, — это сообщения об ошибках, когда (ini_get('error_reporting') & E_STRICT) == true
, Исправление этих ошибок способом, основанным на ошибках, кажется неоптимальным.
Поэтому для того, чтобы написать код, полностью совместимый со строгими стандартами PHP, я хотел бы прочитать, что в них определено. Где я могу найти строгие стандарты PHP?
Все поиски, которые я провел, приводят только к инструкциям о том, как исправить какую-то произвольную ошибку, о которой сообщают Строгие Стандарты, но не сами Строгие Стандарты. Может ли кто-нибудь предоставить ссылку?
Единственный способ узнать, где все возможности для E_STRICT
быть выпущенным будет означать, чтобы источник поиска E_STRICT
, В основном, посмотрите здесь на главную ветку: http://lxr.php.net/search?q=&DEFS =&рефов = E_STRICT&Путь = Зенд% 2F&истор =&Проект = PHP_TRUNK. Обратите внимание, что в некоторых случаях мастер может отличаться от конкретной версии тем, что E_STRICT
ошибки возникают и когда.
Конечно, понять источник PHP было бы сложно без понимания C и некоторой общей терминологии внутренних компонентов.
Ниже приведен полный список возможных 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, не стесняйтесь редактировать их здесь, если вы их найдете.
class ClassName
{
public static $propName = 1;
}
$o = new ClassName;
echo $o->propName; // error here
$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
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
abstract class ClassName
{
abstract public static function methodName(); // error here
}
class OtherClassName extends ClassName
{
public static function methodName()
{
return 1;
}
}
// 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
{
}
}
// 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;
}
}
// Emitted when calling mktime() with no arguments
$time = mktime(); // error here
// 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
// Emitted by mysqli_next_result() when there are no more results
do {
// stuff
} while (mysqli_next_result($link)); // error here
Не существует единого места, в котором перечислены все строгие ошибки, но я бы тоже не ожидал такого. Этот список будет огромный.
Что вы можете сделать, это искать E_STRICT уведомления. Распространенным местом, в котором будут перечислены эти списки, является список миграции, который выпускается при выпуске минорных версий PHP (т. Е. 5.X). Вот 5.4 список обратной несовместимости, который показывает, что имеет E_STRICT
уведомления сейчас. Я думаю, что это лучшее, что вы можете получить.