需要解释这些特定的PHP类如何工作

时间:2014-02-20 19:08:19

标签: php

我很难理解几段代码。希望你能帮我解决这些新手问题。

class ChatBase{

    // This constructor is used by all the chat classes:

    public function __construct(array $options){

        foreach($options as $k=>$v){
            if(isset($this->$k)){
                $this->$k = $v;
            }
        }
    }
}

ChatUser只有两个空的受保护变量,它扩展了chatBase。 Instatiation:

  $user = new ChatUser(array(
        'name'        => $name,
        'gravatar'    => $gravatar
    ));

我的问题是构造函数部分的作用是什么?我们为什么要交换这些键/值?

另一个问题:

class DB {
    private static $instance;
    private $MySQLi;

    public static function init(array $dbOptions){
        if(self::$instance instanceof self){
            return false;
        }

        self::$instance = new self($dbOptions);
    }

基本上我很难理解这来自新的自我($ dbOptions);什么是'自我;在这种情况下参考?

我怎样才能在课堂上调试self或任何其他变量的值?非常感谢清除它。

3 个答案:

答案 0 :(得分:1)

1)

构造函数允许您通过在实例化对象时向构造函数提交关联数组来设置实例属性(来自已定义的“白名单”)。


2)

PHP中没有console.log这样的东西,但您可以使用echovar_dump代替。在这种情况下,self指的是班级。

答案 1 :(得分:0)

让我们评论以下代码:

public function __construct(array $options){ 

创建__constructor(使用new Class()创建类的新实例时自动执行的函数)并接受必须为数组的参数,并保存到$options


    foreach($options as $k=>$v){

遍历$options并将$k设置为键的值(例如namegravatar)并将$v设置为值{{您的初始化工具中的{1}}或$name


$gravatar

检查当前类是否具有名称为 if(isset($this->$k)){ (键)的属性。例如。 “这个类有一个名为$k”的属性吗?


name

如果属性存在,请将其设置为值(例如 $this->$k = $v; ):

答案 2 :(得分:0)

在第一个问题中,$this->$k = $v;正在$this上创建新属性。

循环播放时,$k将为'name'$v将为$name$this->$k与执行$this->name相同,因此将$this->name设置为$name

在第二个问题中,self指的是当前的类。因此,new self($dbOptions)就像在做new DB($dbOptions)