Переменные функции PHP - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть функция с именем

chewbacca() {
    include('external.php');
    echo $lang[1];
    ...
    }

Файл external.php содержит весь массив $ lang. Однако, поскольку мне приходится выполнять эту функцию тысячи раз, я хотел бы включить файл только один раз. Если я включаю_once ('external.php'); перед функцией, как я могу использовать переменные массива $ lang в своей функции без необходимости писать "global" перед каждым использованием?

Ответы [ 5 ]

2 голосов
/ 30 декабря 2011

Может быть, передав это в качестве аргумента?

<?php

include 'external.php';

function chewbacca($lang_array){
    echo $lang_array[1];
    //...
}

Edit:

Вы также можете сделать следующее:

На external.php:

<?php

return array(
    'foo',
    'foobar',
    'bar',
);

На index.php:

<?php

function chewbacca($lang_array){
    echo $lang_array[1];
    //...
}

$foo = include 'external.php';
chewbacca($foo);

Edit2: Конечно, теперь вы можете использовать include_once, но я бы порекомендовал require_once, потому что у вас не будет массива, если include завершится неудачно, и сценарий должен остановиться с ошибкой.

1 голос
/ 30 декабря 2011

Статический класс также является решением.

class AppConfiguration {
    static $languages = array(
      'en' => 'English'  
    );
}

function functionName($param) {
    $lang = AppConfiguration::$languages;
}

require_once этот класс в документе и все.

1 голос
/ 30 декабря 2011

Проще говоря, вы не можете ...

У вас есть несколько способов сделать это:

Путь № 1

global $lang;
include('external.php')
function chewbacca(){
    global $lang;
    echo $lang[1];
}

Путь № 2

function chewbacca(){
    include('external.php')
    echo $lang[1];
}

Путь № 3

function chewbacca(){
    static $lang;
    if(!is_array($lang)){ include('external.php'); }
    echo $lang[1];
}

Путь № 4

include('external.php')
function chewbacca($lang){
    echo $lang[1];
}
chewbacca($lang);

Удачи

PS: Еще один способ - использовать CLASS, загрузить строки в классе при его создании (внутри конструктора) и получить доступ к языковым строкам из $ this-> lang...

1 голос
/ 30 декабря 2011

Если я не понимаю, что вы ищете, вам не нужно писать global перед каждым использованием, вы просто должны использовать его в начале функции.

include('external.php');

chewbacca() {
    global $lang;
    echo $lang[1];
    ...
}
0 голосов
/ 30 декабря 2011

Если я вас правильно понял, попробуйте передать его в локальную область, прежде чем использовать его;таким образом вам нужно будет использовать глобальную область видимости только один раз внутри функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...