Php 从另一个类中引用类时未定义的属性和未定义的索引
我目前正在为一个客户机处理一个大型项目,为了帮助简化工作并简化会话管理,我制作了一个会话类,这意味着如果我改变了会话管理的方式,我可以访问一个文件中的会话结构,而不是多个文件中的会话结构(如用户名或当前页面) 我的类有3种类型的函数setter、getter和unsetter,这是自解释的 现在在这个例子中,我直接向会话类设置一条错误消息,然后从另一个类获取错误消息,该类从会话中调用函数 下面是我文件中的简化版本,显示了我觉得相关的代码 c_session.phpPhp 从另一个类中引用类时未定义的属性和未定义的索引,php,oop,class,Php,Oop,Class,我目前正在为一个客户机处理一个大型项目,为了帮助简化工作并简化会话管理,我制作了一个会话类,这意味着如果我改变了会话管理的方式,我可以访问一个文件中的会话结构,而不是多个文件中的会话结构(如用户名或当前页面) 我的类有3种类型的函数setter、getter和unsetter,这是自解释的 现在在这个例子中,我直接向会话类设置一条错误消息,然后从另一个类获取错误消息,该类从会话中调用函数 下面是我文件中的简化版本,显示了我觉得相关的代码 c_session.php class session {
class session {
private $instance = 'isntname';
private $A_user = 'user';
private $A_page = 'page';
private $A_message = 'message';
//Set messages to the session.
public function set_message($type, $value) {
$_SESSION[$this->instance][$this->A_message][$type] = $value;
}
//Get messages from the session.
public function get_message() {
return $_SESSION[$this->instance][$this->A_message];
}
//Unset messages from the session.
public function unset_message() {
#unset($_SESSION[$this->instance][$this->A_message]);
}
}
c_operations.php
class operations {
//Display all pending messages.
public function display_pending_messages() {
if(session::get_message() != null) {
foreach(session::get_message() as $type => $value) {
if(strlen($type) != null) {
echo '
<div class="panel ' . $type . '">
' . $value . '
<span class="close" onclick="hide_parent_element(this);">X</span>
</div>
';
}
}
session::unset_message();
}
}
}
收到的错误/通知等
Notice: Undefined property: operations::$instance in /var/www/_classes/parent_session.php on line 43
Notice: Undefined property: operations::$A_message in /var/www/_classes/parent_session.php on line 43
Notice: Undefined index: in /var/www/_classes/parent_session.php on line 43
第43行指的是return$\u SESSION[$this->instance][$this->A_message];
现在,如果我通过$session->get\u message()
直接调用get\u message()
和unset\u message()
,它将按预期工作,但在本例中,它将执行另一个函数$operation->display\u pending\u messages()
它返回上述错误。显然,这与$this->
运算符有关,但我不确定如何停止此操作。我尝试了各种搜索,虽然找到了类似的内容,但在这种情况下没有帮助
有人能解释一下我哪里出了问题以及如何解决这个问题吗
提前感谢。您正在尝试静态调用这些函数,但它们是实例方法。例如
会话::get_message()
尝试向函数添加static关键字,或者最好传入实例化的类,并使用$session->get_message()调用这些方法。
等等。在类
操作中
您将会话称为静态会话,但所有数据都在一个对象中。
最好的方法是将类会话的所有数据存储在静态中:
`
课堂{
private static $instance = 'isntname';
private static $A_user = 'user';
private static $A_page = 'page';
private static $A_message = 'message';
//Set messages to the session.
public static function set_message($type, $value) {
$_SESSION[self::instance][self::A_message][$type] = $value;
}
//Get messages from the session.
public static function get_message() {
return $_SESSION[self::instance][self::A_message];
}
}
因此,您可以在代码中使用session::
调用所有函数,而无需创建对象会话
public function display_pending_messages($session) {
if($session->get_message() != null) {
private static $instance = 'isntname';
private static $A_user = 'user';
private static $A_page = 'page';
private static $A_message = 'message';
//Set messages to the session.
public static function set_message($type, $value) {
$_SESSION[self::instance][self::A_message][$type] = $value;
}
//Get messages from the session.
public static function get_message() {
return $_SESSION[self::instance][self::A_message];
}