Я пытаюсь внедрить пространства имен в плагин, который я разрабатываю для WordPress, и столкнулся с проблемой, которая кажется довольно странной.Родительские переменные доступны в дочернем методе __construct
, но не в любом другом методе в дочернем классе.
У меня есть родительский класс - class.db.php
, который обрабатывает создание и удаление таблиц(активация и деактивация плагина) и сохранение некоторых переменных, таких как имена таблиц и т. д.
Затем у меня есть дочерний класс - class.db.users.php
, который расширяет родительский класс выше и обрабатывает все CRUDметоды для таблицы User.
Родительский класс - class.db.php
<?php
namespace PUWP\DB\Functions;
class PU_dbFunctions{
public $wpdb;
public $collate;
public $userTable;
function __construct(){
global $wpdb;
$this->wpdb = $wpdb;
$this->collate = $this->wpdb->get_charset_collate();
$this->userTable = $this->wpdb->prefix.'pu_users';
}
}
?>
Дочерний класс - class.db.users.php
<?php
namespace PUWP\DB\Functions\Users;
DBFunctions(); // Temporary Function to include DB file above.
use PUWP\DB\Functions\PU_dbFunctions as PUWPDB;
class PU_dbUsers extends PUWPDB {
function __construct(){
parent::__construct();
var_dump( $this->wpdb );
// returns as expected
}
public function returnUserByEmail( $email ){
var_dump( $this->wpdb );
var_dump( $this->userTable );
// both return null
return $this->wpdb->get_results( $this->wpdb->prepare( "SELECT * FROM `{$this->userTable}` WHERE `email`= %s", $email ), OBJECT );
}
}
?>
Я пытался удалить дочернего элемента __construct
метод все вместе, который, кажется, не работает.
Что я сделал не так?Все работало нормально, пока я не начал добавлять пространства имен.Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ
Вызов с:
У меня есть еще 2 класса - один для вызовов Ajax (который загружает следующий класс пользователя) и один дляВзаимодействие с пользователем / Форматирование возвращенных результатов из базы данных (логин, проверка подлинности и т. Д.)
class.user.php
DBUserFunctions();
use PUWP\DB\Functions\Users\PU_dbUsers as DBUsers;
use DateTime;
class PU_User extends DBUsers {
// Class Methods
public function login( $email , $password ){
$user = $this->returnUserByEmail( $email );
//rest of login code if user is returned
}
public function get_UserByEmail( $email ){
$user = $this->returnUserByEmail( $id );
if( is_array( $user ) && ! empty( $user ) ){
$user = $this->formatUser( $user[0] );
return $user;
}
return false;
}
}
?>
class.ajax.php
<?php
// User Database is included before this file is included in the plugin.
namespace PUWP\Ajax;
use PUWP\Users\PU_User as PUWPUSERS;
class Ajax_Handler{
private $pu_settings;
public $PUusers;
function __construct(){
$this->PUusers = new PUWPUSERS;
}
}
?>