变量可用于所有代码?

时间:2011-11-25 12:41:28

标签: php arrays class

如何使变量数组可用于整个代码。

例如,我需要在一个类或函数中向$ids[]添加整数,以便我可以在常规代码中使用它:

class displayClass {
    public function display($field){
        $fieldNum=0;
        $puzzle=$field;
        echo "<form action=\"index.php\" method=\"post\"><table border = \"3\" ><tr>" ;

        for($i=1;$i<=36;$i++){

            if($puzzle[$i]==0){
                echo "<td><input type=\"text\" name=\"field".$i."\" maxlength=\"1\" size=\"1\"/></td>";  
                //problem is above... need to sava ids of fields..don't know how
            }  else {

                echo "<td>".$puzzle[$i]."</td>";

            }

            if($i%6==0){
                echo "</tr><tr>";
            }
        }

        echo "</td></table></form>";
    }
}

我需要将$i添加到类外的新现有数组中。

编辑:

我该如何解决这个问题 严格标准:不应在第35行的Z:\ dev \ organization1 \ project1 \ htdocs \ web \ sudoku \ index.php中静态调用非静态方法displayClass :: display()

4 个答案:

答案 0 :(得分:3)

  1. 班级成员
  2. global关键字
  3. 单身模式
  4. 静态成员
  5. 说明

    <强> 1。班级成员

    class displayClass
    {
        // Members
        // Visible only from inside the class
        private $fieldIds = array();
    
        // Visible from outside the class by using the instance ($displayClass->publicFieldIds)
        public $publicFieldIds = array();
    
        // Methods
        public function display($field)
        {
            // ...
    
            // Add new field ID to member
            $this->fieldIds[] = 1;
    
            // ...
        }
    }
    


    2。 global关键字

    global $a, $b;
    

    请参阅http://www.php.net/manual/en/language.variables.scope.php

    第3。单身人士模式
    请参阅网络上已有的说明: http://en.wikipedia.org/wiki/Singleton_pattern

答案 1 :(得分:0)

class MyClass {
    public $a;
    public static $b;

    public function MyMethod {
        // use $a or $b here
    }
}

$myInstance = new MyClass();
$myInstance->$a = 0; // you can access a from outside like this
MyClass::$b = 0; // you can access static b from outside like this

答案 2 :(得分:-1)

如果您必须这样做,那么这表明您使用的代码库存在设计和体系结构问题,这超出了本问题的范围。

但是要解决您的问题,请使用global关键字:

class displayClass {
    public function display($field){

        global $YOUR_VARIABLE_HERE;

        // for example:
        global $ids;

        $fieldNum=0;
        $puzzle=$field;
        echo "<form action=\"index.php\" method=\"post\"><table border = \"3\" ><tr>" ;

        for($i=1;$i<=36;$i++){

            if($puzzle[$i]==0){
                echo "<td><input type=\"text\" name=\"field".$i."\" maxlength=\"1\" size=\"1\"/></td>";  
                //problem is above... need to sava ids of fields..don't know how
            }  else {

                echo "<td>".$puzzle[$i]."</td>";

            }

            if($i%6==0){
                echo "</tr><tr>";
            }
        }

        echo "</td></table></form>";
    }
}

当然假设$ids[]确实是一个具有全局范围的变量,并且未在现有函数或类中定义。

答案 3 :(得分:-1)

最好的方法是为您的代码正确规划

设置名为'displayClass'的类中的任何全局变量都是设计不良的明确标志 你必须在其他地方准备变量,然后在这个类和其他代码中使用。

并使用一些简单易懂的代码(如

$ids = getWhateverIds();

在全球范围内。