Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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函数调用失败了?_Php - Fatal编程技术网

为什么这个php函数调用失败了?

为什么这个php函数调用失败了?,php,Php,我正在尝试使用以下PHP类: <?php class Service { public $code, $description; public static $services = array( "A" => "Shipping", "B" => "Manufacturing", "C" => "Legal", "D

我正在尝试使用以下PHP类:

<?php 

class Service {

    public $code, $description;

    public static $services = array(
        "A"         =>      "Shipping",
        "B"     =>      "Manufacturing",
        "C"         =>      "Legal",
        "D"         =>      "Accounts Receivable",
        "E"         =>      "Human Resources",
        "F"         =>      "Security",
        "G"         =>      "Executive",
        "H"         =>      "IT"
    );

    public function _construct( $c, $d) {
        $this->code = $c;
        $this->description = $d;
    }

    public static function getDescription( $c ){
        return $services[$c];
    }

    public static function generateServiceList() {

        $service_list[] = array();

        foreach ($services as $k => $v ){
            $service_list[] = new Service( $k, $v );
        }

        return $service_list;

    }

}

?>
知道为什么吗?这是某种访问问题吗?谢谢。

$services变量在函数外部声明。使用类时,必须使用$this关键字访问它,如下所示:

...
foreach ($this->services as $k => $v ){
...
稍后编辑:对于静态变量,请使用self::$services而不是$this->services。

$services未定义。你的意思是自我:$services吗


您希望引用类的$services,而不是函数的本地$services。

我现在无法测试它,但我的直觉是移动$service并没有被实例化。在这种情况下,我倾向于使用init变量的方法。在这种情况下,您可以创建另一个方法

$services = array(
        "A"         =>      "Shipping",
        "B"     =>      "Manufacturing",
        "C"         =>      "Legal",
        "D"         =>      "Accounts Receivable",
        "E"         =>      "Human Resources",
        "F"         =>      "Security",
        "G"         =>      "Executive",
        "H"         =>      "IT"

实例化

否-generateServiceList函数和数组都是静态的。是。如果某个对象是静态的,则它不绑定到对象引用。这意味着没有$this->services,而是一个服务::$services数组。正确答案是RiaD的答案。否-generateServiceList函数和数组都是静态的。
...
foreach ($this->services as $k => $v ){
...
foreach ($services as $k => $v ){
            $service_list[] = new Service( $k, $v );
        }
foreach ($this->services as $k => $v ){
            $service_list[] = new Service( $k, $v );
        }
$services = array(
        "A"         =>      "Shipping",
        "B"     =>      "Manufacturing",
        "C"         =>      "Legal",
        "D"         =>      "Accounts Receivable",
        "E"         =>      "Human Resources",
        "F"         =>      "Security",
        "G"         =>      "Executive",
        "H"         =>      "IT"