在另一个类方法中创建类对象,导致胎儿错误

时间:2015-04-30 07:08:08

标签: php class oop namespaces

我收到此错误

  

可捕获的致命错误:参数1传递给   classes \ session :: session_check()必须是。的实例   classes \ conf \ collections,没有给出,调用   第48行的/var/www/html/test1/index.php并在中定义   第18行/var/www/src/classes/session.php

我的收藏类是

namespace classes\conf{
        class collections{
            private $mongo;

            public function __construct(){
                $this -> mongo = new \MongoClient();
            }

            public function members(){
                return $this -> mongo -> publicData -> members;
            }
        }
    }

我的会话课程是

namespace classes{
        use \classes\conf\collections;

        class session{
            private $session_id;
            private $session_token;
            private $cookie_token;

            public function __construct(){
                $this -> session_id = session_id();
                $this -> session_token = (isset($_SESSION['token'])) ? $_SESSION['token'] : NULL;
                $this -> cookie_token = (isset($_COOKIE['token'])) ? $_COOKIE['token'] : NULL;

                echo 'Hey';
            }

            public function session_check(collections $collection){
                $data = $collection -> members() -> findone(
                    array(
                        'account.username' => 'uday'
                    ),
                    array(
                        '_id' => 1
                    )
                );

                return true;
            }
        }
    }

我正在使用spl_autoload来包含类。如果我在session_check函数之外创建新对象并作为变量传递,那么一切正常。但这也应该有效。任何人都可以解释为什么它会出现胎儿错误。

为什么collections $collection没有创建对象,因为错误显示为none given

1 个答案:

答案 0 :(得分:1)

您的错误原因是调用session_check的代码。

public function session_check(collections $collection){

不会创建新集合,但要求在调用函数时传递类型为collections的参数。

因此你必须做这样的事情:

$session = new session();
$collections = new collections();
$session->check_session($collections);