【问题标题】:PHP passing value to a classPHP将值传递给类
【发布时间】:2012-05-26 17:22:11
【问题描述】:

我有一个名为 DatabaseController 的类,我已将其设置为:

<?php

class DBController {

    public $dbName;

    function _controller($passedDBName) { 
        $dbName = $passedDBName;
    }

    function dbConnect() { 
        print $this->$dbName;
    }



} //end of class       
?>

我这样称呼它:

<?php

    //make new database connection
    $dbManager = new DBController("somevalue");
    $dbManager->dbConnect();


?>

但我不断收到此错误:

<b>Fatal error</b>:  Cannot access empty property in 

我做错了什么?

谢谢

【问题讨论】:

    标签: php class constructor


    【解决方案1】:

    在构造函数中,$dbName = $passedDBName; 应该是$this-&gt;dbName = $passedDBName;

    更新:

    1. $this-&gt;$dbName 应该是 $this-&gt;dbName
    2. _controller() 应该是 __construct()

    【讨论】:

    • 错误是因为dbConnect() 试图访问一个未初始化的变量。该变量是未初始化的,因为您在构造函数中键入$dbName = $passedDBName;,它应该是$this-&gt;dbName = $passedDBName;
    • 这是不正确的。 $this-&gt;$dbName 访问名称存储在$dbName 中的字段。由于未设置 $dbName,它会尝试访问名称为空的字段 - 而 that 会导致致命错误。读取未定义的字段只会导致通知。 - 见codepad.org/Zu6yQuno
    • 啊,我明白了。我刚刚注意到$this-&gt;$dbName 中的第二个$
    【解决方案2】:

    使用$this-&gt;dbName - 否则您会尝试访问名称存储在$dbName 中的字段。您还需要修复您的构造函数以分配给$this-&gt;dbName 而不是$dbName

    class DBController {
        public $dbName;
        function _controller($passedDBName) { 
            $this->dbName = $passedDBName;
        }
        function dbConnect() { 
            print $this->dbName;
        }
    }
    

    【讨论】:

    • 到底是谁在不发表评论的情况下对正确答案投反对票?
    • 不客气。请在 15 分钟延迟结束后接受答案。而且由于您似乎对 PHP 比较陌生,请考虑查看 PHP 文档 - 它非常好。
    • 我只是好奇 _controller 是构造函数名称吗?我可以在类中指定我自己的构造函数名称吗?我在手册中找不到它。我没有兴趣这样做 - 但我很好奇。
    • 构造函数总是被称为__construct。所以_controller 对 PHP 根本没有特殊意义。请参阅php.net/manual/en/language.oop5.magic.php 了解所有可能的魔法方法的列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多