【问题标题】:PHP access property of individual method inside object对象内单个方法的PHP访问属性
【发布时间】:2014-07-16 22:33:13
【问题描述】:

试图在函数中获取属性,所以不知道该怎么做。 这是我的课:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Data extends CI_Controller {

   public $data;

   public function __construct()    {
       parent::__construct();
       $this->load->model('months');
       $this->load->driver('cache');

   }
}

public function graph1() {

    $this->data = $this->months->get_months();
    $this->layout->view('graph1', $this->data);
}

因此尝试在另一个类中获取graph1() 中$data 的值,例如:

$object = new Data();
print_r($object->data);

这给了我一个空白输出,我怎样才能使 $data 值具有数据库结果集?

【问题讨论】:

  • 在询问$object-&gt;data 之前,您应该致电$object-&gt;graph1() 吗?
  • @ChibuezeOpata 调用 $object->graph1() 没有任何作用。还有其他想法吗?为什么有人反对这个答案?它满足问题的所有要求。再一次,人们无法回答我发布的问题,我被否决了……太错误了
  • 我的意思是您正在调用$object-&gt;data,但该对象不应该保存任何结果,因为只有在您调用graph1 函数时才会分配数据。在 Stackoverflow 上,您需要提出的问题不仅适用于您自己,也适用于其他人。
  • @ChibuezeOpata 这个问题适用于任何尝试对将数据发送到布局的函数进行单元测试的人。单元测试的一部分是查看 $data 发送到布局的内容是否正确。再次,令人难以置信的是,我因提出问题而被否决。我意识到 $data 尚未填充,但这是问题的一部分,“我怎样才能使 $data 值具有数据库结果集?”

标签: php function oop object


【解决方案1】:

在转储您的对象数据之前,调用您的图形方法以实际获取数据。即

$object = new Data();
$object->graph1();
print_r($object->data);

您也可以从构造函数中调用graph1,例如:

public function __construct()    {
   parent::__construct();
   $this->load->model('months');
   $this->load->driver('cache');
   $this->graph1();
}

这样你就可以实际使用:

$object = new Data();
print_r($object->data);

如果这解决了您的问题,我建议您阅读OOP concepts。问候。

【讨论】:

  • 这是一个 Web 应用程序,因此如果我在构造函数中调用 graph1(),Web 应用程序将中断,因为它将向布局发送不正确的数据。我想直接从 graph1() 中提取它的原因是我不会弄乱布局,下面是一个适用于布局的解决方案。所以请阅读,不要讨厌。
【解决方案2】:

我将展示适用于 Web 应用程序和单元测试的真正解决方案。

在数据控制器上将其更改为:

public function graph1() {

   $this->data = $this->months->get_months();
   $this->layout->view('graph1', $this->data);

}

收件人:

public function graph1() {

   $this->data = $this->months->get_months();
   $this->layout->view('graph1', $this->data);
   return $this->data;
}

返回不会导致布局和视图出现问题。并将正确的数据返回给单元测试:

public function testgraph1() {      

    $object = new Data();

    $out = $object->graph1();
    print_r($out);

    $this->assertArrayHasKey('11', $out);
}

所以另一个答案是不正确的,并且在构造函数中调用graph1() 时会导致布局问题。我不需要阅读有关 OOP 的内容,但会建议回答错误的人阅读有关 Web 应用程序和单元测试的内容。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多