我现在已经使用了程序,并试图更好地理解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'];住在课堂以外的任何地方,还是我错过了一个重点?
由于
答案 0 :(得分:5)
$bob->name = $_POST['name'];
将对象的$bob
)name
属性设置为$_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