доступ к внешней переменной массива внутри класса - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть массив. но я не знаю, как получить к нему доступ внутри класса.

ниже мой пример кода.

<?php

$value[0]=11;
$value[1]=22;
$value[2]=33;

class test {
    var $code1,$code2,$code3;

    function __construct() {
            $this->$code1 = $value[0];
            $this->$code2 = $value[1];
            $this->$code3 = $value[2];
            echo $code1;
        }
}

Ответы [ 4 ]

1 голос
/ 05 сентября 2011

Читать это .

И вы можете сделать любое из следующего:

Передать значение в конструктор в качестве параметра (рекомендуемая опция)

<?php

$value[0]=11;
$value[1]=22;
$value[2]=33;

class test {
    var $code1,$code2,$code3;

    function __construct($value) {
            $this->code1 = $value[0];
            $this->code2 = $value[1];
            $this->code3 = $value[2];
            echo $this->code1;
        }

}

$obj = new test($value);

?>

Использовать массив $GLOBALS ( документы )

<?php

$value[0]=11;
$value[1]=22;
$value[2]=33;

class test {
    var $code1,$code2,$code3;

    function __construct() {
            $this->code1 = $GLOBALS['value'][0];
            $this->code2 = $GLOBALS['value'][1];
            $this->code3 = $GLOBALS['value'][2];
            echo $this->code1;
        }

}

$obj = new test;

?>

Используйте ключевое слово global ( документы )

<?php

$value[0]=11;
$value[1]=22;
$value[2]=33;

class test {
    var $code1,$code2,$code3;

    function __construct() {
            global $value;
            $this->code1 = $value[0];
            $this->code2 = $value[1];
            $this->code3 = $value[2];
            echo $this->code1;
        }

}

$obj = new test;

?>

ПРИМЕЧАНИЯ

Я исправил пару ошибок выше.

Вы должны использовать $this->code1 вместо $this->$code1. Вторая версия действует синтаксически, но означает что-то еще. Рассмотрим следующий пример:

 class myClass {

   public $myVar = "My Var";
   public $anotherVar = "Another Var";

   function __construct () {

     // creates a local variable to the constructor, called $myVar
     // does NOT overwrite the value defined above for the object property
     $myVar = "anotherVar";

     echo $myVar; // echoes 'anotherVar'
     echo $this->myVar; // echoes 'My Var'
     echo $this->$myVar; // echoes 'Another Var'

   }

 }

Кроме того, приведенный выше пример иллюстрирует причину, по которой вы должны использовать echo $this->code1;, а не просто echo $code1;

0 голосов
/ 05 сентября 2011

Примерно так:

class test
{
    var $code1,$code2,$code3;

    function __construct($input)
    {
        $this->code1 = $input[0];
        $this->code2 = $input[1];
        $this->code3 = $input[2];
    }
}

[...]

$value[0]=11;
$value[1]=22;
$value[2]=33;

$test = new test($value);
0 голосов
/ 05 сентября 2011

Глобальные переменные не видны внутри функций, если вы не используете ключевое слово global. e.g.:

// Global variable
$x = 5;

// Won't affect the global
function foo()
{
    $x = 3;
}

// Will affect the global
function bar()
{
    global $x;
    $x = 2;
}

Примечание

Однако, в общем случае, не рекомендуется использовать такие глобальные переменные. Он вводит зависимости и делает ваш код более сложным для тестирования и отладки. Я предлагаю вам передать переменную в качестве аргумента вашему конструктору.

0 голосов
/ 05 сентября 2011
class test { 
    private $code1,$code2,$code3;

    function __construct($value) {
        $this->code1 = $value[0];
        $this->code2 = $value[1];
        $this->code3 = $value[2];
        echo $this->code1;
    }
}

Использование:

$test = new Test($value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...