Не могу понять поведение - PullRequest
0 голосов
/ 22 июня 2011

Почему мой код выглядит так:

if ( ! function_exists('get_values')){
    global $str;
    function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
            $totalPares = $tpar;
            $ventasPiso = $vpiso;
            $totalComisiones = $tcomi;
            $totalGastos = $tgas;
            $totalTotal = $ttotal;
            $str = $totalPares . "," . $ventasPiso . "," . $totalComisiones . "," . $totalGastos . "," . $totalTotal;
            return $str;
    }

    function getEm(){
        return $str;
    }
}

Я не могу переопределить значение $ str.Он всегда печатает ¨a¨, если я пытаюсь его отобразить, и внутри функции «getEm» он говорит, что это неопределенная переменная.

Это вспомогательный файл в структуре codeigniter.

РЕДАКТИРОВАТЬ

, которая все еще дает мне эту ошибку:

Обнаружена ошибка PHP

Серьезность: Уведомление

Сообщение:Неопределенная переменная: str

Имя файла: helpers / helper_common_functions_helper.php

Номер строки: 15

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Вы должны сделать из него класс, если вы хотите сохранить состояние в определенной области видимости. global не рекомендуется

class MyClass {
  private $str = "a";

  public function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
        $totalPares = $tpar;
        $ventasPiso = $vpiso;
        $totalComisiones = $tcomi;
        $totalGastos = $tgas;
        $totalTotal = $ttotal;
        $str = $totalPares . "," . $ventasPiso . "," . $totalComisiones . "," . $totalGastos . "," . $totalTotal;
        return $str;
  }

  public function getEm(){
    return $this->str;
  }
}

Затем вам нужно создать экземпляр класса, прежде чем вы сможете его использовать (конечно), но вы сохраняете чистоту своей области действия

$x = new MyClass;
echo $x->getEm();

Если вы создаете класс только со статическими свойствами и методами, вам не нужно создавать его экземпляр (MyClass:getEm()).

1 голос
/ 22 июня 2011
global $str;

Вам необходимо исследовать переменную область видимости. Функции имеют свою область видимости, если у вас нет global $variable в начале для доступа к переменным вне этой функции. Обратите также внимание, что использование глобальных переменных является «ненулевым», и его следует избегать любой ценой.

function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
        global $str;
        $totalPares = $tpar;
        $ventasPiso = $vpiso;
        $totalComisiones = $tcomi;
        $totalGastos = $tgas;
        $totalTotal = $ttotal;
        $str = $totalPares . "," . $ventasPiso . "," . $totalComisiones . "," . $totalGastos . "," . $totalTotal;
        return $str;
}
0 голосов
/ 22 июня 2011

Глобалы выглядят неуместно, может быть, это поможет:

if ( ! function_exists('get_values')){
    function getValues($getThem, $tpar, $vpiso, $tcomi, $tgas, $ttotal){
        global $str; ##### <- place it here
            $totalPares = $tpar;
            $ventasPiso = $vpiso;
            $totalComisiones = $tcomi;
            $totalGastos = $tgas;
            $totalTotal = $ttotal;
            $str = $totalPares . "," . $ventasPiso . "," . $totalComisiones . "," . $totalGastos . "," . $totalTotal;
            return $str;
    }

    function getEm(){
        global $str; ##### <- place it here
        return $str;
    }
}

Заметка: я не знаю, насколько хорошо разработан codeigniter, но использование глобальной переменной с именем $str звучит для меня как вызов проблемы. Дайте ему имя, которое лучше отражает то, к чему оно принадлежит и что оно обозначает. $getValues_Helper_String хотя строка не говорит много. Несколько советов по поиску имени .

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