Почему я не могу получить доступ к переменной внутри оператора If? - PullRequest
0 голосов
/ 08 января 2012

Вот заявление IF.Я хочу получить доступ к переменной timeStampCleaned позже.

    if ($xmlRatesTime = '') {
        $timeStampCleaned = date('j F Y H:i', $ratesTimeStamp); // Convert unix timestamp into date format
    } else {
        // ...
    }

Примерно так:

    if(empty($ratesTimeStamp)) {

        $newXML = simplexml_load_file('cache/rates.xml');

        $child = $newXML->addChild('currency');
        $child->addAttribute('id', ''.$to.'');
        $child->addChild('title', $toTitle);
        $child->addChild('loc', $toLocation);
        $child->addChild('rate', $finalRate);
        $child->addChild('timestamp', $timeStamp);

        $dom = new DOMDocument('1.0');
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = true;
        $dom->loadXML($newXML->asXML());
        $newXMLdomCleaned = $dom->saveXML();

        file_put_contents('cache/rates.xml', $newXMLdomCleaned);
    }

Но я получаю сообщение об ошибке:

Notice: Undefined variable: timeStampCleaned in ...file... on line 208

От чегоЯ понимаю, что доступ к переменным внутри if нормален.Поэтому я понятия не имею, почему это не работает!?

Спасибо

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Вероятно, это потому, что вы не объявляете переменную в части else вашего оператора.Если $xmlRatesTime не равно '', $timeStampCleaned не будет создано.Попробуйте добавить объявление в "else", например:

if ($xmlRatesTime = '') {
    $timeStampCleaned = date('j F Y H:i', $ratesTimeStamp);
} else {
    $timeStampCleaned = ''; // add this here!
}

Хотя, вообще говоря, я считаю, что это плохая практика программирования.Я бы рекомендовал объявить переменную перед оператором if в целом, например:

$timeStampCleaned = '';
if ($xmlRatesTime = '') {
    $timeStampCleaned = date('j F Y H:i', $ratesTimeStamp);
} else {
    //whatever
}

В качестве примечания, вы имели в виду $xmlRatesTime=='' (два знака равенства)?

1 голос
/ 08 января 2012

1) подробнее о области видимости переменных (я не PHP-парень, но мне понадобилось несколько секунд, чтобы выкопать это: http://php.net/manual/en/language.variables.scope.php)

2) Тест на равенство, который вы делаете, вовсе не является тестом на равенство. используйте == или ===

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