【发布时间】:2015-04-22 01:16:23
【问题描述】:
我正在开发 PHPStorm 并将 PHP 项目从过程代码更改为 OOP,但是,当更改为 OOP 时,PHP 似乎找不到对象的方法,这是一张图片
我该如何解决这个问题?还是我应该忽略它?
【问题讨论】:
标签: php class oop methods phpstorm
我正在开发 PHPStorm 并将 PHP 项目从过程代码更改为 OOP,但是,当更改为 OOP 时,PHP 似乎找不到对象的方法,这是一张图片
我该如何解决这个问题?还是我应该忽略它?
【问题讨论】:
标签: php class oop methods phpstorm
那是因为你应该使用
/**
* @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
【讨论】: