这是我想要获得的示例代码,但在用户类中,我在PHPSotrm中没有得到代码完成(对于$ this-> app)。
如何更改该代码以启用代码完成?我想避免global
。
namespace myApp
class app
{
public $pdo = "my PDO";
public function __construct() {
$this->user=new User($this);
$this->test=new Test($this);
echo $this->user->getPDO();
//"my PDO"
echo $this->test->getUserPDO();
//"my PDO"
}
}
class User
{
private $app=null;
public function __construct($app) {
$this->app=$app;
}
public function getPDO() {
return $this->app->pdo;
//no code completion
}
}
class Test
{
private $app=null;
public function __construct($app) {
$this->app=$app;
}
public function getUserPDO() {
return $this->app->user->getPDO;
//no code completion
}
}
答案 0 :(得分:1)
有很多关于如何实现这一目标的信息。您需要做的就是添加描述属性类型的PHPDoc。
class User
{
/**
* @var App
*/
private $app=null;
/**
* @param App $app
*/
public function __construct($app) {
$this->app = $app;
}
/**
* @return PDO
*/
public function getPDO() {
return $this->app->pdo;
}
}
如果通过魔法getter / setter实现属性,则可以在类本身上使用相同的原则。
/**
* @property App $app
* @method Pdo getPdo()
*/
class User
{
// …