如果我拼错变量名,有没有办法强迫PHP爆炸(错误,无论如何)?如果我正在使用类的实例并且拼写变量的名称错误呢?
[我知道我应该习惯它,但也许有办法强制执行名称检查?]
谢谢!
编辑:抱歉,这不是很具体。这是代码,我想得到两个错误。现在我只得到一个(最后一行)。
error_reporting(E_ALL|E_STRICT);
class Joe {
public $lastName;
}
$joe = new Joe();
$joe->lastNombre = "Smith";
echo "And here it is " . $jose;
答案 0 :(得分:7)
这是我非常迅速地掀起的事情,以展示在发生类似情况时如何触发错误:
<?php
error_reporting( E_ALL | E_STRICT );
class Joe {
public $lastName;
public function __set( $name, $value ) {
if ( !property_exists( $this, $name ) ) {
trigger_error( 'Undefined property via __set(): ' . $name, E_USER_NOTICE );
return null;
}
$this->$name = $value;
}
public function __get( $name ) {
if ( !property_exists( $this, $name ) ) {
trigger_error( 'Undefined property via __get(): ' . $name, E_USER_NOTICE );
return null;
}
return $this->$name;
}
}
$joe = new Joe();
$joe->lastNom = "Smith";
echo $joe->lastNom , "\n";
?>
答案 1 :(得分:2)
你可以尝试:
error_reporting(E_ALL|E_STRICT);
编辑:好的,我现在已经阅读了更新的问题。我觉得你运气不好。这在PHP中是有效的。有人说这是一个特色。 :)
答案 2 :(得分:2)
来自error_reporting
上的PHP文档:
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
答案 3 :(得分:1)
您可以在代码中使用它:
error_reporting(E_ALL);
或在php.ini
中php_error_reporting=5
答案 4 :(得分:1)
设置error_reporting以包含E_NOTICE可能会有所帮助。每当您使用未定义的变量时,它都会显示通知/错误(请注意,它不会停止执行)。
答案 5 :(得分:1)
知道这是一篇旧帖子 - 但偶然发现它寻找解决方案。
这是我的最终解决方案:
我有一个我的类扩展的抽象类,会在magic __get和__set上引发错误。
这是令人讨厌的 - 但它有效![/ p>
它类似于上面的建议 - 但也在方法声明中添加了“final”以阻止人们覆盖它。
我们还使用代码嗅探器来捕获这些 - 但我希望在编码时“实时”获取我的错误消息,而不必等待来自嗅探器的报告。 (人们也可以忽略嗅探报告!)
以下示例代码
<?php
/**
* Abstract
* Some default Abstract functions that everything should extend
*
* @package example
* @subpackage lib
*/
/**
* Class mh_abstract
* Some default MH Abstract functions that everything should extend
*
* @package example
* @subpackage lib
*/
abstract class lib_abstract
{
/**
* Throws an error if php magic set is called
*
* @param string $key
* @param string|object $value
*
* @throws Exception When trying to set a new class property
*/
final public function __set($key, $value)
{
// get if the thing we are trying to set is a object
if(is_object($value))
{
// if so let's just report it's name, not the full object
$value = 'object:'.get_class($value);
}
// throw the error!
throw new mh_lib_error_dev_unknownClassProperty('Tried to set new property '.$key.' with value '.$value);
}
/**
* Throws an error if php magic get is called
*
* @param string $key
*
* @throws Exception When trying to set a new class property
*/
final public function __get($key)
{
// throw the error!
throw new mh_lib_error_dev_unknownClassProperty('Tried to get new property '.$key);
}
}
答案 6 :(得分:0)
要捕获未声明的属性,您可以设置_ _Set()魔术方法来捕捉它们
function __set($sKey, $sValue)
{
// any setter data should be *returned* here
// NOTE: this function will only get called if the property is not
// publicly accessible.
trigger_error("Non-existing property name ".$sKey, E_USER_WARNING);
}