Câu hỏi được chỉnh sửa để phản ánh tốt hơn nhu cầu của tôi.Gọi các phương thức lớp cha mẹ
Lấy ví dụ sau đây:
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
}
}
Làm thế nào tôi có thể sửa chữa phương pháp Base_Text_Is::CammelCase()
mà không gọi lớp Base_Text tĩnh (không sử dụng parent::
hoặc Base_Text::
)?
Giải pháp duy nhất tôi đã đưa ra cho loại tình huống này là để tạo ra một hàm singleton như thế này:
function Base()
{
static $instance = null;
if (is_null($instance) === true)
{
$instance = new Base();
}
return $instance;
}
Và thay đổi phương pháp Base_Text_Is::CammelCase()
này:
return ($string === Base()->Text->CammelCase($string));
Và để để tránh tạo hai trường hợp đối tượng của lớp Cơ sở, thay vì làm:
$base = new Base();
$base->Text->Is->CammelCase('MethodOverloading'); // true
Tôi chỉ cần làm:
Base()->Text->Is->CammelCase('MethodOverloading'); // true
Đây có phải là thực tiễn tốt không? Có bất kỳ giải pháp khác?
I don' t nhận được bình luận cuối cùng của bạn trong câu trả lời của Darrell. Bạn không thể truy cập thuộc tính tĩnh của 'Base_Text'? Từ nơi nào bạn muốn gọi cho họ? Tôi nghĩ bạn nên giải thích thêm điều này. –
@Felix: Tôi đang cố gắng giữ ví dụ đơn giản nhất có thể, có những trường hợp khi tôi không thể gọi một phương thức cha mẹ tĩnh bởi vì nó phụ thuộc vào các thuộc tính được tạo nhanh. –