我正在做一个后端项目。我需要在另一个静态对象中返回一个静态物体:
Class this_is_a_very_long_class_name
{
public static function call()
{
return self;
}
public static function script_link($link)
{
//doing stuff here...
}
}
Class Main
{
public static function view()
{
// trying to return View object
return this_is_a_very_long_class_name::call();
}
}
我正试着这样使用它:
Main::view()::script_link('Some script');
那么我该如何做到这一点呢?
附言:我不寻求其他解决方案。我正在寻找我所问的答案。
您不需要它。
使用
View::script_link();
同样,这是错误的和误导性的view()->script_link
,因为script_link是静态
附录
如果你的问题是你的类名长度,我建议你为此创建一个简单的包装器。
function createLink($string){
return VERY_LONG_CLASS_NAME_HELLO_PHP_NAMESPACE::script_link($string);
}
这样你只需要createLink();
return new View();
(而不是return View::self;
)中的
手动:http://php.net/manual/en/language.oop5.basic.php#example-159
在php 5.2中使用ReflectionClass
我认为您在调用中的语法是错误的。由于它是静态的,尝试做的事情看起来像这样:
Main::view()::script_link('Some script');
除非这会给你带来语法错误。此外,由于它是静态的,您不需要返回任何内容。你应该打两个单独的电话:
Main::view();
View::script_link("Some script");
说"我需要返回一个静态对象"是没有意义的。如果定义了类,那么静态对象就存在并且可以访问。
您只需要一个变量来保存类,因为直接调用是无效的语法样品:
Class Main
{
public static function view($type)
{
// return some class
switch ($type) {
case "View 2":
return View2;
break;
default:
return View;
}
}
}
$v = Main::view("normal view");
$v::script_link('test');
您是否正在寻找作为后期静态绑定的功能?这是PHP 5.3支持的。请参见此处:http://php.net/manual/en/language.oop5.late-static-bindings.php