面向对象的编程访问变量值,如何?

时间:2009-10-15 16:07:17

标签: php

我是一名学习者,我有一个 db 类来帮助我在mySQL中连接和获取结果。

$set = $db->get_row("SELECT * FROM users");
echo $set->name;

这样我就在课堂外使用echo结果。

现在我已经创建了另一个类名用户并且它具有此功能

public function name() {
            global $db;
            $set = $db->get_row("SELECT * FROM users");
            $this->name = $set->name;
    }

初始化类用户后,当我尝试回显 $ user-> name 时,我没有得到预期的结果。

注意我已在用户

中的 var $ name; 上方声明

3 个答案:

答案 0 :(得分:3)

我非常担心我在这里看到的几件事

  1. 方法名称name()对于该方法应该做什么非常不通信。请记住,方法是操作 - 尝试在他们的名字中给他们一些动词。
  2. 当您使用aggregation or composition时,global在课程中的使用(甚至是global 期间的使用)。
  3. 您没有显示任何执行示例,但我只能假设您从未实际调用User::name(),这就是您的测试失败的原因
  4. 以下是解决这些问题的一些代码。

    <?php
    
    class DB
    {
      /* Your methods and stuff here */
    }
    
    class User
    {
      protected $db;
      protected $name;
    
      public function __construct( DB $db )
      {
        $this->db = $db;
      }
    
      public function getName()
      {
        if ( is_null( $this->name ) )
        {
          $set = $this->db->get_row( "SELECT * FROM users" );
          $this->name = $set->name;  
        }
        return $this->name;
      }
    }
    
    $db = new DB();
    
    $user = new User( $db );
    echo $user->getName();
    

答案 1 :(得分:1)

class DB
{
    public function get_row($q)
    {
        # do query and store in object
        return $object;
    }
}

class User
{
    public $name;

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

    public function name() {
        global $db;
        $set = $db->get_row("SELECT * FROM users");
        echo "<pre>".print_r($set)."</pre>"; # make sure $set is returning what you expected.
        $this->name = $set->name;
    }
}

$db = new DB();
$user = new User();
echo $user->name;

答案 2 :(得分:0)

我非常抱歉,我发现问题出在我身上,我正在使用cookies,并且有两个饼干设置了问题:(