【问题标题】:Variables in __construct() when called by mysqli_fetch_objectmysqli_fetch_object 调用时 __construct() 中的变量
【发布时间】:2013-07-29 20:30:12
【问题描述】:

我有一个“事件”类,我通过mysqli_fetch_object 创建对象。 __construct() 函数正在运行并且正在设置对象变量,但它们未在 __construct() 函数中设置。

我正在使用以下行来创建对象:

$events[$x] = $result->fetch_object("Event")

当我通过调用$events[$x]->eventPlaces(); 运行以下函数时,它会回显变量。

public function eventPlaces()
{
    echo $this->capacity;
}

但是,在构造函数中使用相同的代码时,它什么也不回显。

public function __construct()
{
    echo $capacity;
    echo $this->capacity;
}

抱歉,如果我解释得不好,我刚刚重新开始编码,OO php 对我来说是新的,如果我遗漏了什么,请告诉我。

【问题讨论】:

  • 是$this->在调用构造函数之前设置的容量值吗?
  • 你在哪里设置$this->capacity
  • 说实话我不知道。我曾经把它写在 __construct() 括号内,并且在函数中有 $this->capacity = $capacity;但后来我意识到 $this->capacity 或 $capacity 在 __construct() 函数中都没有值。我删除了它们,不知何故 $capacity 仍在设置中。我假设在 db 中有一个“容量”列,它将 $capacity 变量设置为 fetch_object() 的一部分。
  • php.net/manual/en/mysqli-result.fetch-object.php 在调用对象的构造函数之前设置属性。
  • 感谢 cbuckley 知道这真的很有用。未来需要开始使用正确的术语!变量和属性。

标签: php object mysqli construct


【解决方案1】:

我想你希望你的班级看起来像这样:

class Event{
    protected $capacity;
    public __construct($capacity){
        $this->capacity = $capacity;
    }

    public function eventPlaces(){
        return $this->capacity;
    }
}

然后你会这样做:

$events[$x] = $result->fetch_object("Event", array(12));
echo $events[$x]->eventPlaces();

【讨论】:

  • 谢谢瑞恩。你放在那里的一切都是有道理的;它基本上是我最初所拥有的,如果我像你在这里一样创建对象,它可以正常工作,但是当我通过 fetch_object() 创建对象时,__construct 的行为似乎有所不同。
  • 你的意思是mysqli_fetch_object()
  • 是的,我认为,至少:$result->fetch_object("Event")
  • 是否有可能__construct() 立即运行,然后fetch_object 函数根据列名分配值?这可以解释为什么容量没有在 __construct() 中设置,而是在之后直接设置?
  • 我认为发生了什么,是您没有设置容量变量,您可以使用数组将其作为参数传递,就像我在编辑中所做的那样。 $events[$x] = $result->fetch_object("Event", array(12)); 在我的示例中应该显示 12
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2013-03-26
  • 2016-11-12
  • 2011-06-23
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多