PHPStorm - 在主题类中找不到方法

标签 php phpstorm type-hinting

我有一个正在处理的项目,我刚刚切换到 PHPStorm,因为它开始变得越来越大,我需要一些重构工具。我注意到,由于变量未声明为类型(就像它们在 Java 中一样),因此 PHPStorm 有时不知道在哪里查找对变量名的方法调用。这是我的代码。

<?php

require_once "autoloader.php";


class User {

    private $userID;
    private $email;
    private $encryptedPassword;
    private $userDBWriter;
    private $company;
    private $companyInfoChangeRequest;
    private $admin;
    private $accountIsActive;
    private $dealTracker;
    private $changeRequestPending;

    function __construct($email, $encryptedPassword) {
        $this->email = $email;
        $this->encryptedPassword = $encryptedPassword;
        $this->userDBWriter = new UserDBWriter();
        $this->admin = false;
        $this->dealTracker = new DealTracker($this);
    }

    public function addUserToDB() {
        $this->userDBWriter->addUserToDB($this);
    }

    public function setUserAsAdmin($adminStatus) {
        $this->admin = (bool) $adminStatus;
    }

    public function userAccountActiveStatus($accountStatus) {
        $this->accountIsActive = (bool) $accountStatus;
    }

    public function setUserID($userID) {
        $this->userID = $userID;
    }

    public function getUserID() {
        return $this->userID;
    }

    public function getEmail() {
        return $this->email;
    }

    public function isAdmin() {
        return $this->admin;
    }

    public function isAccountActive() {
        return $this->accountIsActive;
    }

    public function getEncryptedPassword() {
        return $this->encryptedPassword;
    }

    public function toArray() {
        $userArray = array(
            "id"=>$this->userID,
            "email"=>$this->email,
            "company_name"=>$this->getCompanyName(),
            "business_type"=>$this->getBusinessType(),
            "company_phone"=>$this->getCompanyPhone(),
            "company_street"=>$this->getCompanyStreet(),
            "company_city"=>$this->getCompanyCity(),
            "company_zip"=>$this->getCompanyZip(),
            "monday_hours"=>$this->getMondayHours(),
            "tuesday_hours"=>$this->getTuesdayHours(),
            "wednesday_hours"=>$this->getWednesdayHours(),
            "thursday_hours"=>$this->getThursdayHours(),
            "friday_hours"=>$this->getFridayHours(),
            "saturday_hours"=>$this->getSaturdayHours(),
            "sunday_hours"=>$this->getSundayHours(),
            "store_image_path"=>$this->getStoreImagePath(),
            "shop_description"=>$this->getShopDescription(),
            "deals"=>$this->dealTracker->dealsToArray()
            );
        return $userArray;  
    }

    public function addCompany(Company $company) {
        $this->company = $company;
    }

        public function getCompanyName() {
            return $this->company->getCompanyName();
        }

        public function getBusinessType() {
            return $this->company->getBusinessType();
        }

        public function getCompanyPhone() {
            return $this->company->getCompanyPhone();
        }

        public function getCompanyStreet() {
            return $this->company->getCompanyStreet();
        }

        public function getCompanyCity() {
            return $this->company->getCompanyCity();
        }

        public function getCompanyState() {
            return $this->company->getCompanyState();
        }

        public function getCompanyZip() {
            return $this->company->getCompanyZip();
        }

        public function getMondayHours() {
            return $this->company->getMondayHours();
        }

        public function getTuesdayHours() {
            return $this->company->getTuesdayHours();
        }

        public function getWednesdayHours() {
            return $this->company->getWednesdayHours();
        }

        public function getThursdayHours() {
            return $this->company->getThursdayHours();
        }

        public function getFridayHours() {
            return $this->company->getFridayHours();
        }

        public function getSaturdayHours() {
            return $this->company->getSaturdayHours();
        }

        public function getSundayHours() {
            return $this->company->getSundayHours();
        }

        public function getStoreImagePath() {
            return $this->company->getStoreImagePath();
        }

        public function getShopDescription() {
            return $this->company->getShopDescription();
        }

        public function isBusinessVerified() {
            return $this->company->getVerifiedBusiness();
        }

    public function setCompanyInfoChangeRequest($company) {
        $this->companyInfoChangeRequest = $company;
    }

    public function submitCompanyInfoChangeRequest($company) {
        $this->companyInfoChangeRequest = new CompanyInfoChangeRequest($this, $company);
        $this->companyInfoChangeRequest->submitCompanyInfoChangeRequest();
    }

    public function cancelCompanyInfoChangeRequest() {
        if ($this->changeRequestPending) {
            $this->companyInfoChangeRequest->cancelRequest();
        }
    }

    public function isCompanyChangeRequestPending() {
        return $this->changeRequestPending;
    }

    public function approveCompanyInfoChangeRequest($company) {
        $this->companyInfoChangeRequest->approveCompanyInfoChangeRequest($this);
    }

    public function setChangeRequestPending($isPending) {
        $this->changeRequestPending = (bool) $isPending;
    }
        public function getChangeRequestCompanyName() {
            return $this->companyInfoChangeRequest->getCompanyName();
        }

        public function getChangeRequestBusinessType() {
            return $this->companyInfoChangeRequest->getBusinessType();
        }

        public function getChangeRequestCompanyPhone() {
            return $this->companyInfoChangeRequest->getCompanyPhone();
        }

        public function getChangeRequestCompanyStreet() {
            return $this->companyInfoChangeRequest->getCompanyStreet();
        }

        public function getChangeRequestCompanyCity() {
            return $this->companyInfoChangeRequest->getCompanyCity();
        }

        public function getChangeRequestCompanyState() {
            return $this->companyInfoChangeRequest->getCompanyState();
        }

        public function getChangeRequestCompanyZip() {
            return $this->companyInfoChangeRequest->getCompanyZip();
        }

        public function getChangeRequestMondayHours() {
            return $this->companyInfoChangeRequest->getMondayHours();
        }

        public function getChangeRequestTuesdayHours() {
            return $this->companyInfoChangeRequest->getTuesdayHours();
        }

        public function getChangeRequestWednesdayHours() {
            return $this->companyInfoChangeRequest->getWednesdayHours();
        }

        public function getChangeRequestThursdayHours() {
            return $this->companyInfoChangeRequest->getThursdayHours();
        }

        public function getChangeRequestFridayHours() {
            return $this->companyInfoChangeRequest->getFridayHours();
        }

        public function getChangeRequestSaturdayHours() {
            return $this->companyInfoChangeRequest->getSaturdayHours();
        }

        public function getChangeRequestSundayHours() {
            return $this->companyInfoChangeRequest->getSundayHours();
        }

        public function getChangeRequestStoreImagePath() {
            return $this->companyInfoChangeRequest->getStoreImagePath();
        }

        public function getChangeRequestShopDescription() {
            return $this->companyInfoChangeRequest->getShopDescription();
        }

}

一些带有警告 “类中找不到方法...” 的方法是 getCompanyName() getBusinessType() getCompanyPhone() 和调用 $this->company$this->companyInfoChangeRequest 方法的任何其他方法。

我知道为什么会这样。这是因为 PHPStorm 不知道变量是什么的实例。我注意到这里Method not found in class他们使用 PHPDoc 注释来键入提示变量类型,以便 PHPStorm 知道去哪里查找。 我想要一个“不发表评论”的解决方案,因为如果我将来遇到评论,我可能会删除它。对不起,长课。我正在将项目导入 PHPStorm,这样我就可以开始进行一些重构。谢谢。

最佳答案

为了完整起见,并为 SO 用户提供可行的替代方案,我更喜欢使用 PHPdocs 来执行此操作的基于评论的解决方案,因此在您的实例中我会这样做:

/**
*   @var Company 
*/
private $company.

当您编辑使用相关类的代码时,您将受益于文档完善的类以及有意义的信息。我定期将 phpdocs 放在变量、构造函数方法和大多数公共(public)业务方法上。随着时间的推移,使用大型代码库和 PHPStorm 获得的好处,系统地执行它是一个很小的代价。

详情请访问 PHPDoc.org

关于PHPStorm - 在主题类中找不到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31553959/

相关文章:

python - "Union[int, str]"的索引类型 "Union[List[Any], Dict[Any, Any]]"无效;预期类型 "int"

python - 如何键入提示返回函数的函数?

php - MySql,循环(while foreach)

javascript - php 在 javascript 中上传并解析文件以获取图表

javascript - 登录后处理php中的 session id以将菜单栏项目从登录更改为注销

PhpStorm 单击预览,如 Sublime Text

文件资源管理器/项目窗口中的 PhpStorm 浅黄色突出显示,它是什么以及如何更改颜色?

python - 无法从 'TypeGuard' 导入名称 'typing_extensions'

PHP如何检查一天是否是假期(在指定国家)?

PHPStorm 更改编辑器中差异装订线和折叠箭头的颜色