Переменные, не переносимые во включаемый файл в другом каталоге - PullRequest
0 голосов
/ 29 октября 2010

Итак, у меня есть тема Wordpress.

В файле functions.php я пишу функцию, которая выглядит примерно так:

function my_function(){
    $var1 = 'apple';
    $var2 = 'orange';
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php';
}

И файл fruits.php выглядит так:

<?php

echo "My brother's favorite fruit is an $var1, but my favorite fruit is an $var2.";

?>

Когда я вызываю my_function () где-то в моей теме, оператор echo в fruits.php отображается на экране, но значения $ var1 и $ var2 не отображаются.Они просто пустые.

Теперь вот странная часть.Если я перенесу fruit.php в тот же каталог, что и functions.php, и заменил оператор включения в my_function () следующим образом:

include 'fruits.php';

, то 2 переменные будут отображаться нормально.

Любые идеи, что может быть причиной этой проблемы?

К вашему сведению, я попытался определить путь к fruits.php в переменной, а затем попытался

include $path;

, чтобы нетвыгода.

Ответы [ 3 ]

2 голосов
/ 29 октября 2010
1 голос
/ 31 октября 2010

Вы добавляете каталог include с помощью wordpress stylesheet_directory (например, вместо STYLESHEETPATH константы), который является URL, а не путем к файлу, поэтому его не следует использовать для включения файлов в PHP.Измените это, чтобы правильно включить файл.

1 голос
/ 29 октября 2010

Здесь есть проблема с областью применения переменных в функции.По сути, у вас есть файл, скажем, index.php, в который вы включаете functions.php из некоторого другого каталога.В этом functions.php вы определяете две переменные в области действия функции, то есть переменные видны только внутри функции.Кроме того, эта функция включает файл fruits.php.

Поскольку fruits.php технически включен в *1007*, он ищет переменные $var1 и $var2 в index.php, и они не имеютбыли определены там, потому что они были определены в рамках функции.В основном он ищет переменные, которые он не может видеть.

Вот два способа решения этой проблемы:

Метод 1:

Измените функцию наследующее.

function my_function(){
    global $var1 = 'apple';
    global $var2 = 'orange';
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php';
}

Таким образом, вы заставляете переменные быть не видимыми внутри функции, но быть глобальными или, другими словами, быть видимыми во всем файле.

Метод 2:

Определение переменных вне функции.

$var1 = 'apple';
$var2 = 'orange';
function my_function(){
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php';
}

Для получения дополнительной информации о области видимости переменной, вы можете перейти сюда http://php.net/manual/en/language.variables.scope.php

Надеюсь, это поможет.

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