Sen ne soruyorsun yapamaz; ancak PHP, bir sınıf olarak aynı ada sahip bir işleve sahip olabilir, gerçeğini kullanarak, "hile" olabilir; bu isimlerin çakışmaması olmaz.
Yani, böyle bir sınıf ilan eğer:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Daha sonra bu sınıfın bir örneğini döndüren bir işlev bildirmek - ve sınıf tam olarak aynı ada sahip:
function Test($param) {
return new Test($param);
}
Ve şimdi, bu sordu gibi, bir tek-liner kullanmak mümkün olur - tek şey, böylece yeni kullanarak değil, işlevi çağrılırken edilmiştir:
$a = Test(10)->myMethod();
var_dump($a);
Ve bu işleri: burada, ben alıyorum:
int 20
çıkışı olarak.
And, better, you can put some phpdoc on your function :
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
Bu şekilde, hatta IDE ipuçları olacak - en azından, Eclipse PDT 2.x ile; screeshot bakın:
Edit 2010-11-30 : Sadece bilgi için, yeni bir RFC PHP'nin gelecek sürümlerinden birine bu özelliği eklemek için önerdiği, bir kaç gün önce, teslim edilmiştir.
Bkz: Request for Comments: Instance and method call/property access a>
Yani, bu gibi belki şeyler yapıyor PHP 5.4 veya başka bir gelecek sürümünde mümkün olacaktır:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]