2016-03-28 16 views
3

Tür $bar değişken almaya çalışıyorum.Yansıyan sınıf yönteminde parametre türü nasıl alınır?

<?php 
class Foo 
{ 
    public function test(stdClass $bar, array $foo) 
    { 

    } 
} 

$reflect = new ReflectionClass('Foo'); 
foreach ($reflect->getMethods() as $method) { 
    foreach ($method->getParameters() as $num => $parameter) { 
     var_dump($parameter->getType()); 
    } 
} 

Ben stdClass bekliyoruz ama

Call to undefined method ReflectionParameter::getType() 

Ne yanlış olabilir olsun? Veya bazı başka yolu? ..

$ php -v 
PHP 5.4.41 (cli) (built: May 14 2015 02:34:29) 
Copyright (c) 1997-2014 The PHP Group 
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies 

UPD1 Bu dizi için çalışması gerektiğini de yazın yoktur.

+3

[gettype()] (http://php.net/manual/en/reflectionparameter.gettype.php) PHP 7. –

+0

Ups mevcuttur ... Teşekkürler Not. – Kirby

cevap

2

Zaten ben her durumda çalışır benim çözüm yazdı PHP Reflection - Get Method Parameter Type As String

eklenen benzer bir soru gibi görünüyor: Yalnızca sınıfları ima tipi ediyorsanız

/** 
* @param ReflectionParameter $parameter 
* @return string|null 
*/ 
function getParameterType(ReflectionParameter $parameter) 
{ 
    $export = ReflectionParameter::export(
     array(
      $parameter->getDeclaringClass()->name, 
      $parameter->getDeclaringFunction()->name 
     ), 
     $parameter->name, 
     true 
    ); 
    return preg_match('/[>] ([A-z]+) /', $export, $matches) 
     ? $matches[1] : null; 
} 
3

, sen hangi ->getClass() kullanabilirsiniz PHP 5 ve 7'de desteklenir.

<?php 

class MyClass { 

} 

class Foo 
{ 
    public function test(stdClass $bar) 
    { 

    } 

    public function another_test(array $arr) { 

    } 

    public function final_test(MyClass $var) { 

    } 
} 

$reflect = new ReflectionClass('Foo'); 
foreach ($reflect->getMethods() as $method) { 
    foreach ($method->getParameters() as $num => $parameter) { 
     var_dump($parameter->getClass()); 
    } 
} 

Derslerimden kaynaklanmamın nedeni, bir dizide bulunmasıdır. NULL.

Output: Bunun

object(ReflectionClass)#6 (1) { 
    ["name"]=> 
    string(8) "stdClass" 
} 
NULL 
object(ReflectionClass)#6 (1) { 
    ["name"]=> 
    string(7) "MyClass" 
} 
+0

Evet, işe yarıyor. Teşekkürler! Yani, $ parametre-> getClass()? $ parameter-> getClass() -> name: null; '. Bunu neden fark etmedim bilmiyorum.) Görünüşe göre saat 9'da. :) – Kirby

+0

Evet! Bu durumda üçlü iyi çalışır. –

+0

Hm, bir dizi çalışmıyor ... :( – Kirby