PHP Namepsace - переменные родительского класса неправильно передаются в дочерний класс - PullRequest
4 голосов
/ 29 мая 2019

Я пытаюсь внедрить пространства имен в плагин, который я разрабатываю для 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;
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...