PHP静态属性在子类中行为异常

PHP静态属性在子类中行为异常,php,pdo,Php,Pdo,我正在尝试学习面向对象的PHP,为此我尝试制作登录/注销系统。我遇到的问题如下所示: 场景:DB_CONNECT是父类,具有静态属性数组,父类还有两个子类,即crud.php和user.php。当user.php从静态数组中访问/检索数据时,crud.php将数据添加到父级的静态数组中(有关更多说明,请参阅crud.php中的函数login()) 问题:Child_2获取空数组(因为它是静态数组) 注1:我已验证数据是由child_1添加的。当通过child_1访问静态属性时,它显示数据,但通过

我正在尝试学习面向对象的PHP,为此我尝试制作登录/注销系统。我遇到的问题如下所示:

场景:DB_CONNECT是父类,具有静态属性数组,父类还有两个子类,即crud.php和user.php。当user.php从静态数组中访问/检索数据时,crud.php将数据添加到父级的静态数组中(有关更多说明,请参阅crud.php中的函数login())

问题:Child_2获取空数组(因为它是静态数组)

注1:我已验证数据是由child_1添加的。当通过child_1访问静态属性时,它显示数据,但通过chiild_2显示为空

注2:父类为DB_CONNECT child_1类为crud.php,子类为user.php

DB_CONNECT.php(父类)

crud.php(子类)

user.php(子类)

index.php(实例化类对象)


事实上,我无法重现这个问题。很好@当使用纯php时,CharlotteDunois实际上都可以正常工作,即没有实例化mysql pdo对象。昨天,我在虚拟项目中应用了相同的场景,对它进行了交叉检查,所有的工作都很好,但在pdo的情况下,不知何故它没有。可能我正在调用两个不同的PDO,这就是为什么。。。你认为我的嫌疑犯是对的吗?我不认为PDO在其中起作用。问题更多的是你如何努力完成它。PS:
$\u服务器
从来都不是空的。@CharlotteDunois我正在尝试这个:-你在登录页面上跳转。在您输入您的用户凭据(即用户名、密码)后,如果用户凭据与数据库中存储的凭据相匹配,您将进入管理页面。现在,一旦登录成功,输入的凭证将存储在父类的静态数组中。然后,从管理页面,我使用user.php对象访问该静态数组,以检索以前输入的数据。现在这是它被卡住的地方。
class DB_CONNECT 
{
    /**
    * Stores a database object
    *
    * @var object A database object
    */
    protected $dbc;
    public static $user_name  ;
    public static $fname  ;
    public static $lname  ;
    public static $email  ;
    public static $psword ;
    public static $user_details = array();
    /**
    * Checks for a DB object or creates one if one isn't found
    *
    * @param object $db A database object
    */
    protected function __construct($db=NULL)
    {

        if ( is_object($db) )
        {
            $this->dbc = $db;
            echo 'Connected to DB by child constructor object';
        }
        else
        {
        // Constants are defined in /sys/config/db-cred.inc.php
            $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
            try
            {
                $this->dbc = new PDO($dsn, DB_USER, DB_PASS);
                // echo 'Connected to DB via parent';

            }
            catch ( Exception $e )
            {
            // If the DB connection fails, output the error
                // die ( $e->getMessage() );
                printf("Connection Failed: %s", $e->getMessage());
            }
        }
    }

    public function getParentDetails()
    {
        echo DB_CONNECT::$user_details[0];
    }

}
class CRUD extends DB_CONNECT
{
    // inherits protected $dbc;
    function __construct($dbo=null)
    {
        parent::__construct($dbo);
    }

    public function login()
    {
        $result = '';
        self::$user_details[] = $_POST['fname'];
        self::$user_details[] = $_POST['pwd'];

        if (!empty($_SERVER)) {

            $select = "SELECT first_name, password FROM member_credentials 
                    WHERE first_name = '$_POST[fname]' AND 
                    password = '$_POST[pwd]'";
            $stmt = $this->dbc->prepare($select);
            $stmt->execute();

            $result = $stmt->fetch(PDO::FETCH_NUM);
           // var_dump($result);
            if (!is_array($result)) {
                Redirect::to(404);
            } else {
                DB_CONNECT::$user_name = $result[0];

                // session_start(); 
                Session::set('admin', DB_CONNECT::$user_name);
                Redirect::to('../admin.php');
            }



        }

    }


}
class User extends DB_CONNECT
{

    // inherits protected $dbc;
    function __construct($dbo=null)
    {
        parent::__construct($dbo);
    }

    public function getUserName($name=null)
    {
        return DB_CONNECT::$user_name;
    }


    public function getUserDetails()
    {
        echo DB_CONNECT::$user_details[0];
    }


}
$user = new User();

$user->getUserDetails();