Неопределенная проблема с переменной функцией PHP - PullRequest
3 голосов
/ 19 мая 2011

Я новичок в PHP, поэтому у меня есть небольшие проблемы с функциями.У меня есть эта строка кода:

<?php
$ime=$_POST["ime"];
$prezime=$_POST["prezime"];
$pera="string";
if (empty($ime)||empty($prezime)){
    echo "Ne radi, vrati se nazad i unesi nesto!";
}
function provera($prom){
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){
        echo "Nepravilan unos imena ili prezimina!";
        echo $pera;
        }
}
provera($ime);
provera($prezime);
?>

Во всяком случае, когда я пытаюсь этот код, я всегда получаю сообщение об ошибке, говорящее, что в строке 11 (жирная часть кода) есть ошибка, и никакая переменная не являетсяэхо.Я предполагаю, что это дает мне эту ошибку, потому что моя переменная не определена внутри этой функции, но мне нужно определить ее вне функции, так есть ли способ сделать это?

Ответы [ 5 ]

13 голосов
/ 19 мая 2011

Это потому, что вы используете переменную $pera (которая существует только в глобальной области видимости) внутри функции.

См. Страницу руководства PHP по области переменной для получения дополнительной информации.информация.

Вы можете исправить это, добавив global $pera; в вашу функцию, хотя это не очень элегантный подход, поскольку глобальные переменные избегают по причинам, слишком подробным, чтобы их здесь приводить.Таким образом, было бы лучше принять $pera в качестве аргумента вашей функции следующим образом:

function provera($prom, $pera){
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){
        echo "Nepravilan unos imena ili prezimina!";
        echo $pera;
        }
}
2 голосов
/ 29 апреля 2019

Если ваша версия PHP на 5.3 или более поздней версии, может быть применено закрытие.

Closures may also inherit variables from the parent scope.

use - это синтаксис php для реализации замыкания.

ref: Анонимные функции

    <?php
    // $ime=$_POST["ime"];
    // $prezime=$_POST["prezime"];
    $pera="string";
    $prezime = "Ne radi, vrati se nazad i unesi nesto!";
    // if (empty($ime)||empty($prezime)){
    //     echo "Ne radi, vrati se nazad i unesi nesto!";
    // }
    $provera = function ($prom) use ($pera) {
        if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-\_\=\+\`[:space:]]/",$prom)){
            echo "Nepravilan unos imena ili prezimina!";
            echo $pera;
        }
    };

    // $provera($ime);
    $provera($prezime);
2 голосов
/ 19 мая 2011

В вашей функции функции provera ($ prom) добавьте строку с надписью

global $pera;
2 голосов
/ 19 мая 2011

Вы не можете использовать $pera внутри метода как этот, потому что он не определен внутри области метода.

Если вы хотите использовать метод, передайте его в качестве параметра.

function provera($prom, $pera){ //passed as a param
    if (preg_match("/[0-9\,\.\?\>\.<\"\'\:\;\[\]\}\{\/\!\\\@\#\$\%\^\&\*\(\)\-    \_\=\+\`[:space:]]/",$prom)){
        echo "Nepravilan unos imena ili prezimina!";
    echo $pera;
}
2 голосов
/ 19 мая 2011

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

function echoMyVar( $myVar )
{
   echo $myVar;
}


$p = "toto";
echoMyVar($p);
...