我有一个项目,我正在努力,我刚刚切换到
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,因此我可以开始进行一些重构.谢谢.
简答:
原文链接:/php/134869.html添加$this-> company = new Company;到你的__construct函数.现在,PHPStorm确切知道$this->公司的功能.
说明:
这可能会使您的应用程序变得非常复杂,因为它将从User :: __构造中调用Company :: __构造 – 有效地使其处理和内存有效负载加倍,因为从我可以看到,公司的实例已经存在.也许您不再需要在User类之外创建Company的实例?
此外,由于你已经在内存中有了一个$company对象,因此规范化你的类并在“Company”类中放置(并使用)所有“Company”功能似乎更实际,并将“User”类限制为“用户“功能,只需使用$company-> getCompanyName()来获取该信息,而不是循环$user-> getCompanyName()函数 – 无论如何只调用$company-> getCompanyName().
试一试,看看你的想法?