访问不在类内的数组

时间:2014-02-26 01:57:55

标签: php oop

我想访问我的类中不存在的数组,似乎我似乎可以这样做,这是一个例子:

    $chiInfo =
            array(
                 array("Home", "#"),
                 array("Test", "#"),
            );


    class chiBar {

        var $chiDet;
        function __construct($chiName)
        {
            $this->chiDet = $chiName;
        }

        function getArrayData($array, $arrayNumber, $arrayType, &$result) // $arrayType : 1 - Non-multi, 2 - Multi
        {
            if(!is_array($array)) 
                return 0;

            if($arrayType == 1)
                return 0;
            else
            {
                if($arrayNumber > sizeof($array)-1)
                {
                    print("Invalid array number!"); 
                    return 0;
                }

                $result = array(strval($array[$arrayNumber][0]), strval($array[$arrayNumber][1]));
            }

        }

        function addToHeader($array, $addName, $addLink)
        {   
            array_push($chiInfo, array($addName, $addLink)); // That is the link

            echo "<META HTTP-EQUIV='refresh' CONTENT='15; URL=index.php'>"; 
        }
    }

每当我执行不同的代码时,似乎找不到数组,错误:

Warning: array_push() expects parameter 1 to be array, null given in C:\xampp\htdocs\NewTest\navClass.php on line 40

2 个答案:

答案 0 :(得分:1)

只需将该数组作为参数传递给方法:

function addToHeader($chiInfo, $array, $addName, $addLink)

然后当你打电话时:

$chiBar = new chiBar($chiName);
$chiBar->addToHeader($chiInfo, $array, $addName, $addLink);

答案 1 :(得分:0)

如果您想从函数或类方法中的“顶级”代码中直接访问变量 ,则必须在函数或方法中声明变量global。

E.g。

...

        function addToHeader($array, $addName, $addLink)
        {   
            global $chiInfo;
            array_push($chiInfo, array($addName, $addLink)); // That is the link

            echo "<META HTTP-EQUIV='refresh' CONTENT='15; URL=index.php'>"; 
        }
...

但是,您可以考虑在方法中添加额外的参数,因为全局变量在某些情况下会变得棘手。您可以在此处找到有关使用全局变量的更多信息:http://php.net/manual/en/language.variables.scope.php

使用参数的相同方法:

...
// note the ampersand on the parameter because you seem to want to change the original variable, not just a copy of it
        function addToHeader($array, $addName, $addLink, &$chiInfo) 
        {   
            array_push($chiInfo, array($addName, $addLink)); // That is the link

            echo "<META HTTP-EQUIV='refresh' CONTENT='15; URL=index.php'>"; 
        }
...