Php 模拟非对象的_调用()

Php 模拟非对象的_调用(),php,magic-methods,Php,Magic Methods,以下示例肯定会输出错误: $myVar = "hello"; $var->exeptionForSure(); ==> Fatal error: Call to a member function exeptionForSure() on a non-object in.. 有没有一种方法可以模拟/实现神奇的方法\u call(),在这种情况下也可以工作 如果出于某种原因我试图访问非对象中的方法,我希望能够调用自己的函数。这应该可以: method_exists($var, 'e

以下示例肯定会输出错误:

$myVar = "hello";
$var->exeptionForSure();

==> Fatal error: Call to a member function exeptionForSure() on a non-object in..
有没有一种方法可以模拟/实现神奇的方法
\u call()
,在这种情况下也可以工作

如果出于某种原因我试图访问非对象中的方法,我希望能够调用自己的函数。

这应该可以:

method_exists($var, 'exeptionForSure') ? $var->exeptionForSure() : fallback();
您还可以为对象定义与上述相同的特定方法,以便执行以下操作:

$obj->call_func('func_name', $params);

只有对象具有可以调用的方法。在PHP中,字符串、数字等不是对象,因此不能对它们定义或调用方法

方法_exists检查给定对象是否存在某个方法。但不应为非对象调用此函数

首先,您应该检查$var是否为对象:

if (is_object($var) && method_exists($var, 'exeptionForSure')) {
   $var->exeptionForSure();
} else {
   fallback(); 
}

PHP中没有这方面的工具,而且可能永远也不会有

任何这样的方法都必须在PHP脚本的整个过程中全局存在(没有类上下文供其运行),并且对于这样一个不寻常的需求,它的存在可能会使代码复杂化很多

它还暗示了一些稍微奇怪的范围规则:假设
$non_object->method(42)被翻译为
magic_non_object_调用($non_object,'method',array(42))
左侧操作数(
$non_object
)必须通过值(在这种情况下无法写回)或引用(这要求PHP放弃该变量的“写时复制”内存优化)传入。请注意,对象是用附加的抽象层表示的,因此
$this
(以及“按值传递或复制的对象”)实际上包含“真实”对象的句柄,从而避免了这个确切的问题


从根本上说,您需要这样做的唯一原因是作为“最后一搏”错误处理程序—如果您的代码无法判断给定变量是否为对象,那就是错误。不幸的是,这是一个致命的错误,因此我认为您无法捕获/处理它。(请注意,这不是一个异常;很少有PHP内置程序抛出异常。)

这需要我更改所有代码,我正在寻找一个全局解决方案。。。