首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP命名空间-父类变量未正确传递到子类

PHP命名空间-父类变量未正确传递到子类
EN

Stack Overflow用户
提问于 2019-05-29 10:27:42
回答 1查看 96关注 0票数 4

我正在尝试将命名空间实现到一个为WordPress开发的插件中,但我遇到了一个似乎很奇怪的问题。父变量在子__construct方法中可用,但在子类中的任何其他方法中都不可用。

我有一个父类- class.db.php

它处理创建和删除表(激活和停用插件)以及存储一些变量,如表名等。

然后我有一个子类- class.db.users.php

它扩展了上面的父类,并处理用户表的所有CRUD方法。

父类- class.db.php

代码语言:javascript
运行
复制
<?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

代码语言:javascript
运行
复制
<?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方法,但似乎不起作用。

我做错了什么?在我开始添加名称空间之前,一切都运行得很好。任何帮助都将不胜感激。

编辑

来电地址:

我还有另外两个类-一个用于Ajax调用(加载下一个用户类),另一个用于用户交互/格式化从数据库返回的结果(登录、身份验证等)。

class.user.php

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<?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;
    }
}
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 11:00:40

我设法通过将: parent::__construct();添加到class.users.php方法__construct中来使其正常工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56352289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档