所以我正在重构我的代码来实现更多的OOP.我设置了一个类来保存页面属性.
class PageAtrributes { private $db_connection; private $page_title; public function __construct($db_connection) { $this->db_connection = $db_connection; $this->page_title = ''; } public function get_page_title() { return $this->page_title; } public function set_page_title($page_title) { $this->page_title = $page_title; } }
稍后我会调用set_page_title()函数
function page_properties($objPortal) { $objPage->set_page_title($myrow['title']); }
当我这样做时,我收到错误消息:
在非对象上调用成员函数set_page_title()
那我错过了什么?
这意味着它$objPage
不是对象的实例.我们能看到用于初始化变量的代码吗?
正如您所期望的特定对象类型,您还可以使用PHP类型提示功能文档来在违反逻辑时获取错误:
function page_properties(PageAtrributes $objPortal) { ... $objPage->set_page_title($myrow['title']); }
此功能仅接受PageAtrributes
第一个参数.
有一种简单的方法可以产生这个错误:
$joe = null; $joe->anything();
将呈现错误:
致命错误:
anything()
在第23行的/Applications/XAMPP/xamppfiles/htdocs/casMail/dao/server.php中调用非对象的成员函数
如果PHP会说,那会好很多,
致命错误:未定义来自Joe的调用,因为(a)joe为null或(b)joe未
anything()
在行中定义<##>.
通常,您构建了类,因此$joe
未在构造函数中定义或
要么$objPage
不是实例变量,要么$objPage
用不是类实例的东西覆盖PageAttributes
.