好的,就这样。这是我目前正在使用的工具,它工作正常,但是我对这个想法很挂念...
class Estr {
public static function __callStatic ( $name, $arguments ) {
$class_vars = get_class_vars ( get_called_class ( ) );
if ( is_array ( $class_vars ) && sizeof ( $class_vars ) > 0 ) {
foreach ( $class_vars as $key => $value ) {
if ( strtolower ( $key ) == strtolower ( $name ) ) {
return $key;
}
}
}
}
}
class Relationship extends Estr {
public $alternate;
}
这可以让我打电话;
var_dump ( Relationship :: alternate ( ) ); // response "alternate"
一切都很好。但是,当我开始时,我想要以下结果;
var_dump ( Relationship :: alternate ); // response "alternate"
并且我希望我的人际关系类都可以;
class Relationship extends Estr {
public $alternate;
}
或
class Relationship extends Estr {
const alternate;
}
在Estr类处理返回的变量/常量名称作为值的情况下,具有干净的OOP布局。 (例如,不需要'constternate =“ alternate”;'和'constternate = null;'。)
我尝试了一些解决方案,最接近目标的尝试是尝试捕获调用未定义常量的错误,同时仍返回值。但是,我仍然无法实现所需的类层次结构。
感谢面条,享受拼图! XD
P.S。 还是更好,我如何静态调用不存在的类常量并处理该类中的错误? 例如;关系::替代 响应; “类关系中的错误”
是否有一种方法可以拦截对“定义的常量”的调用,即使它们本质上应该存在? (如果没有,请在这里回答; PHP => Call to non-existing class constants, way to handle?)