问题编辑以更好地反映我的需求。
以以下示例为例:
class Base
{
public $Text = null;
public function __construct()
{
$this->Text = new Base_Text();
}
}
class Base_Text extends Base
{
public $Is = null;
public function __construct()
{
$this->Is = new Base_Text_Is();
}
public function CammelCase($string)
{
return trim(str_replace(' ', '', ucwords($string)));
}
}
class Base_Text_Is extends Base_Text
{
public function CammelCase($string)
{
return ($string === $this->CammelCase($string)); // doesn't work
}
}
如何在不静态调用Base_Text类(不使用parent::或Base_Text::)的情况下修复Base_Text_Is :: CammelCase()方法?
我想到的唯一解决方案是创建一个像这样的单例函数:
function Base()
{
static $instance = null;
if (is_null($instance) === true)
{
$instance = new Base();
}
return $instance;
}
并将Base_Text_Is :: CammelCase()
方法更改为以下内容:
return ($string === Base()->Text->CammelCase($string));
为了避免创建两个Base类的对象实例,不要这样做:
$base = new Base();
$base->Text->Is->CammelCase('MethodOverloading'); // true
我只是执行以下操作:
Base()->Text->Is->CammelCase('MethodOverloading'); // true
这是一种好的做法吗?还有其他解决方案吗?
Base_Text
的非静态属性?你想从哪里调用它们?我认为你应该进一步解释这个问题。 - Felix Kling