tags:

views:

44

answers:

2

Assume that I have a class value object defined in php, where each variable in the class is defined. Something like:

class UserVO {
  public $id;
  public $name;
}

I now have a function in another class, which is expecting an array ($data).

function save_user($data) {
//run code to save the user
}

How do I tell php that the $data parameter should be typed as a UserVO? I could then have code completion to do something like:

$something = $data->id; //typed as UserVO.id
$else = $data->name; //typed as UserVO.name

I'm guessing something like the following, but this obviously doesnt work

$my_var = $data as new userVO();
+3  A: 

in PHP5 this will work. It's called a type hint.

function save_user(UserVO  $data) {
//run code to save the user
}

http://php.net/manual/en/language.oop5.typehinting.php

Palantir
+5  A: 

Use type hint or instanceof operator.

type hinting

public function save_user(UserVO $data);

Will throw an error if the given type is not an instanceof UserVO.

instanceof

public function save_user($data)
{
    if ($data instanceof UserVO)
    {
        // do something
    } else {
       throw new InvalidArgumentException('$data is not a UserVO instance');
    }
}

Will throw an InvalidArgumentException (thanks to salathe for pointing me out to this more verbose exception) which you will be able to catch and work with.

By the way, take a look to duck typing

Boris Guéry
The [`InvalidArgumentException`](http://php.net/invalidargumentexception) might come in handy here to help differentiate it from any other exception that might occur in `save_user`.
salathe
@salathe, you're right, I edited my answer according to your comment.
Boris Guéry