У меня php с массивом, т.е.
$var = array( "var" => "var value", "var2" => "var value1" );
и иметь другой файл с классом, т.е.
class class1{ function fnc1(){ echo $var['var2']; //rest of function here } }
теперь как я могу получить $var['var']
в файле класса в function fnc1()
Вы можете передать его в качестве аргумента или использовать ключевое слово global
чтобы поместить его в текущую область. Однако использование global не рекомендуется, попробуйте передать его в качестве аргумента.
Передайте это как аргумент?
class class1{ function fnc1($var) { echo $var['var2']; } }
И в другом файле вызовите этот метод класса с вашим массивом в качестве аргумента.
От: http://php.net/manual/en/function.include.php
Когда файл включен, код, который он содержит, наследует область изменения строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле с этой точки вперед. Однако все функции и классы, определенные во включенном файле, имеют глобальную область видимости.
Таким образом, вы могли бы сделать
class class1 { function fnc1() { include 'thefile.php' echo $var['var2']; //rest of function here } }
но, как и другие, указываемые ранее, вы не хотите этого делать , потому что он вводит зависимость от файловой системы вашего класса. Если ваш метод требует, чтобы эти переменные работали, добавьте их как аргументы метода или передайте их в конструктор и сделайте им свойство (если они вам понадобятся чаще). Это называется Injection Dependency Injection, и в конечном итоге ваш код будет намного удобнее обслуживать, например, делать
class class1 { private $data; public function __construct(array $var) { $this->data = $var; } function fnc1() { echo $this->data['var2']; //rest of function here } }
и затем
$obj = new class1($var); echo $obj->fnc1();
или требовать передачи данных в метод при вызове
class class1 { function fnc1(array $var) { echo $var['var2']; //rest of function here } }
а потом
$obj = new class1; $obj->fnc1($var);
Вы можете использовать global $var
в вашем включенном файле, но это действительно плохая практика, поскольку другой скрипт перед вашим включенным файлом может переопределить значение / тип $var
.
Пример :
class class1{ function fnc1(){ global $var; echo $var['var2']; //rest of function here } }
Лучшее решение – передать ваш $var
в качестве параметра для вашего fnc1()
даже для вашего class1::__construct()
@Vindia: Я бы предпочел и архаистский стиль, но рекомендовал бы либо использовать подсказку типа, либо простую проверку, чтобы избежать предупреждений при доступе к * non_array * ['var2']:
// acccepts array only. Errors be handled outside function fnc1(Array $var) { echo $var['var2']; } // accepts any type: function fnc1(Array $var) { if (is_array($var)) { echo $var['var2']; } }
class class1{ function fnc1(){ include 'otherFile.php'; echo $var['var2']; //rest of function here } }