Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么ReflectionParameter::isArray总是返回false?_Php_Oop_Reflection - Fatal编程技术网

Php 为什么ReflectionParameter::isArray总是返回false?

Php 为什么ReflectionParameter::isArray总是返回false?,php,oop,reflection,Php,Oop,Reflection,我有一个简单的代码: <?php class TestClass { public function test_function($id, $values = array()) { $ref_met = new ReflectionMethod(__METHOD__); foreach($ref_met->getParameters() as $param) { if($param->isArray

我有一个简单的代码:

<?php

class TestClass {

    public function test_function($id, $values = array()) 
    {

        $ref_met = new ReflectionMethod(__METHOD__);
        foreach($ref_met->getParameters() as $param) {
            if($param->isArray()) {
                echo "$param->name is an array\n";
            } else {
                echo "$param->name is NOT an array\n";
            }
        }       
    }

}

$t = new TestClass();
$t->test_function(5, array());
关于PHP的反射,有什么我不理解的吗?我读了又读,但我找不到任何东西告诉我我做错了什么


如果需要的话,我使用的是PHP5.4.20。

因为RelectionParameter::isArray()检查方法是否需要参数是数组。如果方法默认为数组,则不会。它正在检查类型提示,而不是默认参数。如果没有提示,参数可以是任何东西,因此
isArray
检查将为false。如果没有为参数提供任何内容,则该值只是默认为空数组,但由于您的签名现在可以是任何内容

如果需要数组,则为TRUE,否则为FALSE

让你的班级像这样,这将是真的:

class TestClass {

    public function test_function($id, array $values = array()) 
    {

    }

}

我猜这是一个新手,不知道可以向参数提示类型。这是仅在数组中才可能实现的,还是实际上可以在任何类型中实现?您可以键入提示对象、接口、数组或回调(可调用)。
class TestClass {

    public function test_function($id, array $values = array()) 
    {

    }

}