2013-02-02 29 views
5

tôi cần phải sử dụng thường xuyên như tên lớp cho acces để sở hữu tĩnh lớp này, đó làSử dụng liên tục như tên lớp

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

echo CLASSNAME::$name; 

này trả về lỗi, mà lớp CLASSNAME không tồn tại. Có một số giải pháp? mớ hỗn độn tuyệt đối

+1

Câu hỏi hay. Hmm. – Prash

+0

Có lẽ nếu bạn nói những gì bạn thực sự muốn làm, có thể có một số cách thay thế tốt hơn. Đây có thể là [Vấn đề XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

Trả lời

4

Có thể với sự phản ánh:

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

$obj = new ReflectionClass(CLASSNAME); 
echo $obj->getStaticPropertyValue("name"); 

Nếu nó là một sự lựa chọn thiết kế tốt là một câu hỏi khác ...

+0

có, nó hoạt động. – ripa

0

Sử dụng PHP của dereferencing:

$CLASSNAME = 'a'; 
$a::$name; 
0

tôi đang tìm kiếm vào vấn đề này bởi vì lớp được dựa trên một ngữ cảnh nhất định phải được đưa ra. Vì vậy, tôi đã thực hiện một chức năng trong lớp học của tôi rằng sẽ trả lại lớp học mà bạn yêu cầu như vậy:

/** 
* Instantiate a class by class name in variable 
* 
* @param string $className The name of the class 
* @return mixed The instantiated class 
*/ 
protected function getClass($className) 
{ 
    return new $className; 
} 

Vì vậy, bạn có thể gọi nó bằng cách sử dụng $class = new $this->getClass(static::CLASSNAME); khi bạn định nghĩa một hằng số trong lớp hiện tại chứa tên của lớp bạn muốn khởi tạo. Trong trường hợp của bạn, bạn có thể sử dụng nó mà không có 'static::' hoặc với bất kỳ biến nào bạn muốn sử dụng. Đừng quên thực hiện một số xử lý lỗi.

Các vấn đề liên quan