【问题标题】:PHPStorm - not finding inner objects' methodsPHPStorm - 没有找到内部对象的方法
【发布时间】:2015-04-22 01:16:23
【问题描述】:

我正在开发 PHPStorm 并将 PHP 项目从过程代码更改为 OOP,但是,当更改为 OOP 时,PHP 似乎找不到对象的方法,这是一张图片

我该如何解决这个问题?还是我应该忽略它?

【问题讨论】:

    标签: php class oop methods phpstorm


    【解决方案1】:

    那是因为你应该使用

    /**
     * @var RegistrationDB 
     */
    var $db;
    /**
     * @var Notifier 
     */
    var $notifier;
    
    function __construct() {
        $this->db = new RegistrationDB();
        $this->notifier = new Notifier();
    }
    

    在构造函数中,

    if (!$this->db->hasUser($email)) ... 
    

    当您尝试引用该属性时(由 var $db 支持)。

    编辑:添加 phpdoc pragma 以呈现属性的类可解析。

    编辑 2:在 php OOP 中,对象的属性由 var 声明。因此,var $db; 意味着类的实例对象存在 db 属性

    var $db; in class Foo
    
    ...
    
    $a = new Foo();
    $a->db;  // correct
    $a->$db; // very probable runtime error
    

    例如,来自我当前的一个项目:

    $clinic = \DAO\clinics::insert( true , 'Funky Clinic inc' , new DateTime('now'));
    $clinic->active = true;
    $logger->info($clinic);
    $clinic->$active = false;  // <- this is line 20 from the stack trace
    

    第三行会将对象正确记录到我的日志文件中,而第 4 行将在控制台中出现以下错误:

    > php TestPatient.php 
    PHP Fatal error:  Cannot access empty property in /Users/yvesleborg/devel/Shiva/MyClient/HisProject/DAO/SQL/v1.0/TestPatient.php on line 20
    PHP Stack trace:
    PHP   1. {main}()     /Users/yvesleborg/devel/Shiva/MyClient/HisProject/DAO/SQL/v1.0/TestPatient.php:0
    

    【讨论】:

    • 没关系,重新启动 phpstorm 似乎可以解决问题。无论如何,谢谢,+1 编辑:你能解释一下“$this->$something”和“$this->something”之间的区别吗?
    • 好吧,无论如何解决了这个问题。仍然要小心 $this->$something,你可能会在运行时遇到一些非常时髦的运行时错误。在引用使用 var 声明的属性时首选 $this->something。我还编辑了我的答案,使课程非常明确。
    • @DarkW ... 添加了正确引用对象属性的具体示例。
    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2016-02-24
    • 2016-03-08
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多