PHP静态属性在子类中行为异常
我正在尝试学习面向对象的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静态属性在子类中行为异常,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时,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();