Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从另一个类中引用类时未定义的属性和未定义的索引_Php_Oop_Class - Fatal编程技术网

Php 从另一个类中引用类时未定义的属性和未定义的索引

Php 从另一个类中引用类时未定义的属性和未定义的索引,php,oop,class,Php,Oop,Class,我目前正在为一个客户机处理一个大型项目,为了帮助简化工作并简化会话管理,我制作了一个会话类,这意味着如果我改变了会话管理的方式,我可以访问一个文件中的会话结构,而不是多个文件中的会话结构(如用户名或当前页面) 我的类有3种类型的函数setter、getter和unsetter,这是自解释的 现在在这个例子中,我直接向会话类设置一条错误消息,然后从另一个类获取错误消息,该类从会话中调用函数 下面是我文件中的简化版本,显示了我觉得相关的代码 c_session.php class session {

我目前正在为一个客户机处理一个大型项目,为了帮助简化工作并简化会话管理,我制作了一个会话类,这意味着如果我改变了会话管理的方式,我可以访问一个文件中的会话结构,而不是多个文件中的会话结构(如用户名或当前页面)

我的类有3种类型的函数setter、getter和unsetter,这是自解释的

现在在这个例子中,我直接向会话类设置一条错误消息,然后从另一个类获取错误消息,该类从会话中调用函数

下面是我文件中的简化版本,显示了我觉得相关的代码

c_session.php

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];
}