我们有很多现有的代码,而不是创建一个类的实例,或者在该类上使用静态函数,将在该类的全局单例上调用该方法。
例如(stringclass.php):
class String {
function endsWith($str, $search) {
return substr($str, -strlen($search)) == $search;
}
}
$STRING_OBJECT = new String();
然后它将以下列方式使用它:
include_once("stringclass.php");
if ($STRING_OBJECT->endsWith("Something", "thing")) {
echo "It's there\n";
}
我意识到这不是调用函数的一种非常明智的方法,但我想知道我们是否可以修复人们忘记使用自动加载器包含正确类的所有地方,而不更改所有代码使用这些单身人士。它将检测未声明的全局的使用,并根据被引用的全局名称包含正确的类文件。
答案 0 :(得分:0)
您可以使用ArrayAccess接口
http://php.net/manual/en/class.arrayaccess.php
class Ztring implements arrayaccess
{
private $container = array ();
public function offsetSet ($offset, $value)
{
$this->container[$offset] = $value;
}
public function offsetGet ($offset)
{
// exception
if ($offset == 'something')
{
return 'works!';
}
return $this->container[$offset];
}
public function offsetExists ($offset)
{
return isset($this->container[$offset]);
}
public function offsetUnset ($offset)
{
unset ($this->container[$offset]);
}
}
$x = new Ztring ();
$x['zzz'] = 'whatever';
echo $x['zzz']."\n";
echo $x['something']."\n";