Bir işlev içinde bir nesne Çağrı

1 Cevap php

Yani PHP OOP için değilim.

İşte benim sorun ben bir işlevi çağırabilir ve bir arrary geri sağlayan bir nesne olması. Yani burada kodudur.

$obj = new OBJ();

function go($url){
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

go('http://www.mysite.com/hello');

Bu bana hata veriyor

Ölümcül hata: olmayan bir nesne üzerinde bir üye işlev grabArray () Çağrı

1 Cevap

Bu kapsamla ilgili bir sorun, bir cepten sorun değildir. $ Obj) (fonksiyon halindeyken içinde görünür değildir. Eğer bir parametre olarak geçmek gerekir, ya da küresel anahtar kelime ile işlevin kapsamı içine getirmek ya (önerilmez)

Önerilen yol

$obj = new OBJ();

go('http://www.mysite.com/hello', $obj);

function go( $url, $object )
{
    $array = $object->grabArray($url);
    echo $array['hits'];
}

Not Önerilen yol

$obj = new OBJ();

go('http://www.mysite.com/hello');

function go( $url )
{
    global $obj;
    $array = $object->grabArray($url);
    echo $array['hits'];
}

Kompozisyon OOP kavramına benzer başka bir çözüm var - EYLEYEN bir örneğini oluşturmak için go () fonksiyonu sorumlu olur.

go('http://www.mysite.com/hello');

function go( $url )
{
    $obj = new OBJ();
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

Eğer yeni bir NESNE instance'a Eğer gitmek çalıştırılan her zaman () oluşturmak istiyorum çünkü bu olsa da, muhtemelen ideal değildir. Bir statik değişken) ("caching" go inside obj örneği bu düzeltmek

function go( $url )
{
    static $obj;
    if ( is_null( $obj ) )
    {
        $obj = new OBJ();
    }
    $array = $obj->grabArray($url);
    echo $array['hits'];
}

Eğer gitmek () fonksiyonu içinde başka bir yerde yanında EYLEYEN sizin örneğini kullanmak istemiyorsanız Ama bu kompozisyon gibi bir yaklaşım gerçekten sadece yararlıdır - başka bir yerde kullanmayı yaparsanız, o parametre yaklaşım en iyi seçimdir.

Eldeki görev için doğru çözüm toplama hakkında herşey!