2012-02-17 4 views
4

В Java, я могу передать объект прямо в параметреПередать объект в качестве параметра в PHP

public int foo (Bar bar) 
{ 
    ... call the methods from Bar class 
} 

Так как я могу сделать то же самое с PHP. Благодаря Это мой код:

class Photo 
{ 
    private $id, $name, $description; 
    public function Photo($id, $name, $description) 
    { 
     $this->id = $id; 
     $this->name = $name; 
     $this->description = $description; 
    } 
} 
class Photos 
{ 
    private $id = 0; 
    private $photos = array(); 

    private function add(Photo $photo) 
    { 
     array_push($this->photos, $photo); 
    } 
    public function addPhoto($name, $description) 
    { 
     add(new Photo(++$this->id, $name, $description)); 
    } 
} 
$photos = new Photos(); 
$photos->addPhoto('a', 'fsdfasd'); 
var_dump($photos); // blank 

Если изменить функцию добавить

function add($name, $description) 
{ 
    array_push($this->photos, new Photo(++$this->id, $name, $description)); 
} 

Он работает pefectly. Итак, что не так?

+3

Вы пытались это сделать? Если да, можем ли мы увидеть код? Что пошло не так? Вы получили сообщение об ошибке? См. Также [Руководство по PHP для объектов] (http://php.net/language.types.object) и [аргументы функции] (http://php.net/functions.arguments). – Charles

+8

Точно так же. –

+0

* Если я меняю функцию, добавьте [...] Это работает отлично. Итак, что не так? * Это на вас, чтобы рассказать нам. Что вы ожидаете от происходящего и что происходит? Получаете ли вы какое-либо сообщение об ошибке и т. Д. Из того, что я вижу, вы должны вызывать функцию как $ this-> add (...) 'не просто' add (...) '. –

ответ

10

Вы делаете это точно так же, только с некоторыми изменениями синтаксиса, конечно:

public function foo(Bar $bar) 
{ 
    // $bar->method() 
} 

Имейте в виду, что вы можете только type hint для классов и массивов.

Смежные вопросы