在PHP中为对象属性分配动态值

时间:2010-06-17 15:55:56

标签: php oop

我现在已经使用了程序,并试图更好地理解Php中的OOP。从1号方面开始,我有一个快速的问题,让它凝固。许多基本示例在分配值时显示静态值,例如$bob->name = "Robert";。但我希望传递动态值,比如表格:$name = $_POST['name'];

class Person { 

    // define properties 
    public $name; 
    public $weight; 
    public $age;

    public function title() { 
        echo $this->name . " has submitted a request "; 
    }
} 

$bob = new Person; 

// want to plug the value in here
$bob->name = $name; 
$bob->title();

我想我在某些方面有点挂起,只要从类中访问变量,封装和放大器。 “规则”等,可以$ name = $ _POST ['name'];住在课堂以外的任何地方,还是我错过了一个重点?

由于

4 个答案:

答案 0 :(得分:5)

$bob->name = $_POST['name'];

将对象的$bobname属性设置为$_POST['name']

答案 1 :(得分:3)

$bob->name = $_POST['name'];。 OOP中的安全做法是使用setter / getter方法。

答案 2 :(得分:0)

唯一的限制是您不能使用表达式来定义类成员变量的默认值。例如,这是无效的语法:

class FooBad {
    protected $bar = $_GET['bar'];
    protected $baz = 1 + 1;
}

但这是有效的:

class FooGood {
    protected $bar = '';
    protected $baz = 1;
    protected $bat = array(
        1,
        2,
    );
}

答案 3 :(得分:0)

您编写了$name = $_POST['name'];,然后使用正确的语法将该值分配给实例公共变量(bob中的名称,即Person类的实例)。在课堂之外,$ name当然不是课堂上的“名字”,但是你再次编写了正确的代码,所以我看不到你认为你错过了什么。也许,$name = $_POST['name'];必须出现在外面类及其方法的事实,然后你也可以写

$bob->name = $_POST['name'];

当然。如果在类方法中编写$name = $_POST['name'],则分配给本地变量:正如您已经知道的(可以在代码中看到),您可以使用$this->name访问实例的名称。以下代码希望澄清一些内容

$name = "hello\n";

class Person
{
  public $name;
  public function title()
  {
    echo $this->name;
  }
  public function setit()
  {
    echo $name; // raises a Notice: undefined variable
    global $name; // now $name refers to global $name
    $name = "I am lost\n";
  }
  public function doit($n)
  {
    $this->name = $n;
  }
}

$bob = new Person;
$bob->title();      // _nothing_
$bob->name = $name;
$bob->title();      // hello
$bob->setit();      // Notice: ---
echo $name;         // I am lost
$bob->title();      // hello
$bob->doit("test\n");
$bob->title();      // test