Nasıl "çağırmak" için

2 Cevap php

bir dize gösterimine bir sınıf örneği "çağırmak" için herhangi bir olasılık var mı?

Bu durumda ben kod böyle bakmak beklediğiniz:

class MyClass {
  public $attribute;
}

$obj = getInstanceOf( "MyClass"); //$obj is now an instance of MyClass
$obj->attribute = "Hello World";

PHP'nin SoapClient bir PHP sınıfı bir WSDL elemanı eşleştirmek için kullanılan classMappings bir listesini kabul eder gibi, bu mümkün olmalıdır düşünüyorum. Ama nasıl SoapClient sınıf örneklerini "çağırarak" nedir?

2 Cevap

$class = 'MyClass';
$instance = new $class;

Sınıf 'yapıcı bağımsız değişken bir dizi kabul eder, ve bir dizide bu argümanları tutun Ancak, (bir çeşit call_user_func_array), Yansıma kullanmak zorunda:

$class = new ReflectionClass('MyClass');
$args  = array('foo', 'bar');
$instance = $class->newInstanceArgs($args);

Orada ReflectionClass::newInstance da, ancak yukarıda ilk seçenek olarak aynı şeyi yapar.

Referans:

Kurucu tarafından gerekli argümanların sayısı bilinen ve sabit ise, (diğerleri gibi sürmüşlerdir) yapabilirsiniz bunu:

$className = 'MyClass';
$obj = new $className($arg1, $arg2, etc.); 
$obj->attribute = "Hello World";

Bir alternatif olarak Yansıma kullanabilirsiniz. Bu da size ihtiyacınız olacak kaç bilmiyorum eğer yapıcı argümanlar dizisini sağlamak anlamına gelir.

<?php
$rf = new ReflectionClass('MyClass');
$obj = $rf->newInstanceArgs($arrayOfArguments);
$obj->attribute = "Hello World";