我有一个查询返回的数组。我希望数组成为一个对象,所以我写道:
public function rules()
{
return [
'area'=>'required',
'number_of_rooms'=>'required',
'address'=>'required'
'images.*'=>'required|image'
];
}
我想在$ object上调用一个方法,但是当我启动时:
$object = (object)($array);
我收到了这个错误:
$object->getUsername();
如何访问对象的数据?
这是我班级的一部分:
Attempted to call method "getName" on class "stdClass".
这是我通过Doctrine使用的查询:
class User implements AdvancedUserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\OneToMany(targetEntity="UserLicense", mappedBy="user_id")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Currency", inversedBy="users")
* @ORM\JoinColumn(name="id_currency", referencedColumnName="id")
*/
protected $currency;
/**
* @ORM\Column(type="string", length=25, unique=true)
*/
private $username;
/**
* @ORM\Column(type="string", length=64)
*/
private $password;
答案 0 :(得分:1)
当您将数组转换为对象时,它会创建stdClass
实例。
它是一个包含所有公共属性的简单对象。
所以只需像这样访问它们:
$object->name;
以下是一个工作示例:https://3v4l.org/Ui9uY
答案 1 :(得分:0)
为了实现这一点,您必须将该数组转换为具有所需方法的对象。
使用(object) $array
时,它将分配类stdClass
,这是php中没有方法的泛型类。所以你不会在那里获得所需的方法。
您应该创建一个具有所需签名的类,并在实例化对象时在构造函数中传递数组,并将其另存为属性或每对key=>value
作为具有相应值的属性。
例如:
$userData = ['name' => 'John', 'email' => 'test@example.com'];
class User
{
property $name;
property $email;
public function __construct(array $userData)
{
// here you'll need some data validation but is not case for this example
$this->name = $userData['name'];
$this->email = $userData['email'];
}
public function getName()
{
return $this->name;
}
public function getEmail()
{
return $this->email;
}
}
$user = new User($userData);
echo $user->getName();
这样,应用程序中的每个对象都将具有特定类型,它将及时帮助您。此外,您可以使用对象的接口。