将数组转换为对象并在其上调用函数

时间:2016-09-30 13:39:43

标签: php typecast-operator

我有一个查询返回的数组。我希望数组成为一个对象,所以我写道:

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;

2 个答案:

答案 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();

这样,应用程序中的每个对象都将具有特定类型,它将及时帮助您。此外,您可以使用对象的接口。