我试图将关联数组中的键和值分配给类属性。下面的代码就是我想出的。当我尝试使用$ user对象时出错。数组可能来自运行数据库查询(PDO)。
我有办法让这项工作成功吗?
<?php
class assoctoprop {
public $fname;
public $lname;
public $email;
public function assign(){
$user = new assoctoprop;
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
foreach($array as $key=>$value){
$user->$key = $value;
}
return $user;
}
}
echo $user->fname."<br/>";
echo $user->lname."<br/>";
echo $user->email."<br/>";
?>
这有效
<?php
class assoctoprop {
public $fname;
public $lname;
public $email;
/*public function assign(){
$user = new assoctoprop;
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
foreach($array as $key=>$value){
$user->$key = $value;
}
return $user;
}*/
}
$user = new assoctoprop;
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
foreach($array as $key=>$value){
$user->$key = $value;
}
echo $user->fname;
echo $user->lname;
echo $user->email;
?>
但我遇到的问题是,我想将整个过程推送到一个方法中,以便我可以在需要时使用它,而不必每次都重写该过程
答案 0 :(得分:4)
除非我误解了你的问题,否则你可以通过将数组上的类型设置为对象来完成同样的事情。
$object = (object)array("fname" => "firstname", "lname" => "lastname", "email" => "my@email.com");
答案 1 :(得分:3)
assign()
看起来像我现在应该在课外。
您可以从内部实例化一个类,但在这种情况下您不需要。只需使用$this
从内部引用该类:
class assoctoprop {
public $fname;
public $lname;
public $email;
public function assign(){
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
foreach($array as $key=>$value){
$this->$key = $value;
}
}
}
$user = new assoctoprop;
$user->assign();
echo $user->fname."<br/>";
echo $user->lname."<br/>";
echo $user->email."<br/>";
您还应该考虑将该数组传递给函数而不是在类中定义它,并且您应该在设置它之前进行一些基本的错误检查以确保该属性存在,等等。
修改:您还可以将assign()
方法设置为class's constructor,以便立即调用:
class assoctoprop {
public $fname;
public $lname;
public $email;
function __construct($array){
foreach($array as $key=>$value){
$this->$key = $value;
}
}
}
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
$user = new assoctoprop($array);
echo $user->fname."<br/>";
echo $user->lname."<br/>";
echo $user->email."<br/>";
编辑2: here's an interesting post关于使用可能尚不存在的类属性(如果您想使其动态化)。