2016-09-30 92 views
-1

我有一个查询返回的数组。我想数组是一个对象,所以我写:将数组转换为对象并调用它的函数

$object = (object)($array); 

我想调用$对象的方法,但是当我启动:

$object->getUsername(); 

我得到这个错误:

Attempted to call method "getName" on class "stdClass". 

如何访问对象的数据?

这是我的课的一部分:

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; 

这是我通过主义使用查询:

$em = $this->getDoctrine()->getManager(); 
    $currency = $em->getRepository('UserBundle\Entity\User')->findBy(array('email' => $userMail)); 
+0

@RyanVincent编辑! –

+0

@RyanVincent是的,通过教条。添加 –

+0

'警告:get_class()期望参数1是对象,数组给予' –

回答

1

当你铸造数组对象,它创造stdClass实例。

这是一个包含所有公共属性的简单对象。

所以,简单地访问他们像这样:

$object->name; 

这里有一个工作示例:https://3v4l.org/Ui9uY

+0

我得到这个:'注意:未定义的属性:stdClass :: $ name' –

+2

数组是否有'name'索引? –

+0

也许你可以在你的数组上做一个var_dump(),这样我们可以看到里面是什么? – KatharaDarko

0

为了这个工作,你必须变换阵列成有,你需要方法的对象。

当你使用(object) $array它将分配类stdClass这是一个在PHP中没有方法的泛型类。所以你不会在那里有你需要的方法。

您应该创建一个具有所需签名的类,并且在实例化该对象时将该数组传递给构造函数,并将其保存为属性或每个对key=>value为具有相应值的属性。

例如:

$userData = ['name' => 'John', 'email' => '[email protected]']; 

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

这种方式在应用程序中的每个对象都会有一个特定的类型,它会帮助你的时间。另外,您可以使用该对象的接口。