Arhn - архитектура программирования

сделать доступными ключи массива, определенные в одной функции, доступными для второй функции

Кажется, это не работает.

Я хочу сделать массив ниже доступным для второй функции, но он всегда оказывается пустым

Основной код такой:

function GenerateSitemap($params = array()) {          

$array = extract(shortcode_atts(array(                         
'title' => 'Site map',                         
'id'    => 'sitemap',                         
'depth' => 2                         
), $params));                                  

global $array; 

}  


function secondfunction()

{
global $array; 

print $title;

// this function throws an error and can't access the $title key from the first function
}

GenerateSitemap()

secondfunction()

Я хочу использовать КЛЮЧИ title, id или depth во второй функции. Они просто приходят пустыми и выдают ошибку

31.12.2012

  • как ты это называешь? Вы использовали print_r($your_array);, чтобы увидеть вывод и убедиться, что массив записывается? 01.01.2013
  • print $title следует читать print $array['title'] - как вы говорите в комментарии... вы получаете доступ к ключу заголовка из массива. (Вызов массива переменных сбивает с толку.) 01.01.2013
  • Кроме того... почему вы не вызываете GenerateSitemap() из своего secondfunction() и избегаете необходимости в глобальной переменной? 01.01.2013
  • В вашем коде есть несколько проблем. Точки с запятой в PHP необязательны. Вы должны сделать переменную глобальной, прежде чем устанавливать ее значение. Что возвращает функция shortcode_atts? Извлечение не делает глобальной переменную $title, а только переменную $array. 08.01.2013

Ответы:


1

«Область действия переменной — это контекст, в котором она определена».

http://us3.php.net/language.variables.scope.php

Вам нужно определить переменную (по крайней мере, изначально) вне функции:

   $array = array();

    function GenerateSitemap($params = array()) {          
       global $array; 
       $array = extract(shortcode_atts(array(                         
          'title' => 'Site map',                         
         'id'    => 'sitemap',                         
         'depth' => 2                         
      ), $params));                                  
   }  

   function SecondFunction() {          
       global $array; 
       ...
   }
31.12.2012
  • и определите его как глобальный в функции ДО того, как вы что-либо с ним сделаете, иначе вы просто играете с локальной копией, которая будет заменена глобальной версией. 01.01.2013
  • Вам не нужно определять переменную вне функции, достаточно объявить ее глобальной внутри функции. 01.01.2013
  • Если вы протестируете этот код, он просто не будет работать. Вы сможете получить доступ к функции GenerateSitemap, но SecondFunction() выдаст ошибку при доступе к ней. 01.01.2013
  • @omar: Parse error: syntax error, unexpected T_STRING не является результатом вызова вышеуказанного кода. Другая часть вашего кода генерирует эту ошибку. 01.01.2013

  • 2

    Вам нужно объявить переменную как global, прежде чем использовать ее внутри функции, иначе она неявно создаст локальную переменную.

    function myFunc() {
        global $myVar;
        $myVar = 'Hello World';
    }
    
    myFunc();
    print_r($myVar);    // 'Hello World'
    

    На самом деле вам не нужно изначально объявлять это в globalscope, вы не получите уведомление/предупреждение/ошибку, хотя это, очевидно, является хорошей практикой. (Хотя, если целью является хорошая практика, вам, вероятно, не следует использовать глобальные переменные для начала.)

    31.12.2012
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..