Adını nesne PHP string

6 Cevap php

Tamam ben bir dize var ...

$a_string = "Product";

ve ben böyle bir nesneye bir çağrı bu dizeyi kullanmak istiyorsanız:

$this->$a_string->some_function();

Nasıl Dickens'ın dinamik o nesneyi diyorsunuz?

(Php 5 aklında Im sanmıyorum)

6 Cevap

Yani kullanmak istediğiniz kod olacaktır:

$a_string = "Product";
$this->$a_string->some_function();

Bu kod bir kaç şey anlamına gelir. Yöntemi ile Product adlı bir sınıfı some_function(). $this özel bir anlamı vardır, ve tek geçerli inside bir sınıf tanımı. Yani başka bir sınıf Product sınıfının bir üyesi olurdu.

Yani kod yasal yapmak için, burada kod.

class Product {
    public function some_function() {
        print "I just printed Product->some_function()!";
    }
}

class AnotherClass {

    public $Product;

    function __construct() {
        $this->Product = new Product(); 
    }

    public function callSomeCode() {
        // Here's your code!
        $a_string = "Product";
        $this->$a_string->some_function();
    }
}

Sonra bu ile çağırabilirsiniz:

$MyInstanceOfAnotherClass = new AnotherClass();
$MyInstanceOfAnotherClass->callSomeCode();

Ben farklı cevap var herkes bu soruyu okudum görünüyor, ama kullanmak için çalışıyoruz variable variables?

Eğer dize kendisi bir işlevi çağırmak için çalıştığınız gibi gösterdiğin kodda görünüyor. Benim tahminim, bu durumda, bu dize olarak aynı ada sahip bir sınıf bir işlevi çağırmak istiyorum ki "Ürün."

Bu böyle bakmak ne olduğunu:

$this->Product->some_function();

Bunun yerine böyle bir şey arıyor olabilir gibi görünüyor:

$Product = new Product();
$Product->some_function();

EDIT: herhangi bir yöntem zincirleme yapmak için PHP5 çalışıyor olması gerekir. Bundan sonra, ne var tamamen yasaldır.

Ben doğru niyetim var bakalım ...

$some_obj=$this->$a_string;
$some_obj->some_function();

Yani bir nesne var, ve bunun bir ("Ürün" olarak adlandırılır) özellikleri bir yöntemi denir some_function () olan başka bir nesne var.

Bu (PHP5.3) benim için çalışıyor:

<?PHP


class Foo {
     var $bar;
}

class Bar {
      function some_func(){
           echo "hello!\n";
      }
}

$f = new Foo();
$f->bar = new Bar();

$str = 'bar';

$f->$str->some_func(); //echos "hello!"

Etrafa PHP4 yok, ama orada işe yaramazsa, size some_function argüman geçmek gerekiyorsa call_user_func() (veya call_user_func_array kullanmak () gerekebilir () olabilir