2010-06-17 71 views
0

我已经使用了一段时间的过程并试图更好地理解PHP中的OOP。从方块1开始,我有一个快速问题,让它凝胶化。许多基本示例显示静态值,例如$bob->name = "Robert";分配值时。但是我想通过动态值,从形式说:$name = $_POST['name'];将动态值分配给PHP中的对象属性

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'];居住在课堂以外的任何地方,还是我错过了一个重要的观点?

感谢

+0

我只使用堆栈溢出几次,它是一个很好的资源。仍然熟悉系统,即投票,“接受答案”等,但我很欣赏在这里获得多个答案/反馈。当我学习程序时,我发现我可以让事情发挥作用,但后来发现我一路上都捡到了不好的习惯......很像这个问题 - 我可以得到“结果”,但不是;我确定我正在做这件事正常。 谢谢! – 2010-06-21 13:32:22

回答

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

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

3

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

0

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

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

但这是有效的:

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

你写$name = $_POST['name'];,那么你该值分配给一个实例公共变量(鲍勃的名字,这是类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