Ошибка аргумента отсутствующей функции - PullRequest
0 голосов
/ 06 марта 2012

Я хочу использовать функцию для отображения значения, которое я назвал "name". Значение отправляется функции через метод POST из формы.

Мой HTML:

<html>
<head>
<title> function play </title>
</head>
<body>
<form method="post" action="function.php">
Name: <input type="text" name="name"/>
<input type="submit" name="submit" value="submit"/>
</form>
</body>
</html>

Мой PHP:

<?php
$name= $_POST['name'];
function writeName($name)
{
echo $name;
}
writeName();
?>

Почему-то я получаю сообщение об ошибке:

Предупреждение: отсутствует аргумент 1 для writeName (), вызываемой в C: \ xampp \ htdocs \ function.php в строке 7 и определенной в C: \ xampp \ htdocs \ function.php в строке 3

Примечание: неопределенная переменная: имя в C: \ xampp \ htdocs \ function.php в строке 5

Что я делаю не так?

Ответы [ 7 ]

2 голосов
/ 06 марта 2012

Вам необходимо передать параметр в функцию.

writeName($name);
2 голосов
/ 06 марта 2012

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

Переменные в PHP "scoped" . Это означает, что где бы вы ни определяли вашу переменную, она будет влиять на ее контекст. В вашем примере $ name, определенное на уровне скрипта, не совпадает с $ name, определенным как параметр функции. Однако $ name, используемое в вашей функции, всегда будет ссылаться на одну и ту же переменную в этой функции .

enter image description here

Чтобы применить это на практике, рассмотрим следующее:

$name = 'a';
function writeName( $name )
{
    echo $name; // echoes 'b'
}
writeName( 'b' );
echo $name;  //echoes 'a'

Еще один способ думать об этом - просто изменить имена переменных, чтобы они заметно отличались:

$getName= $_POST[ 'name' ];

function writeName( $nameToWrite )
{
    echo $nameToWrite;
}

writeName( $getName );

Вы также можете использовать ключевое слово global внутри своей функции, чтобы PHP знал, что вы ссылаетесь на переменную в глобальной области (т. Е. На уровне сценария вне вашей функции), но это, как правило, плохая практика.

$getName = $_POST[ 'name' ];

function writeName()   // Notice that we don't need to pass $getName as an argument
{
    global $getName;
    echo $getName;
}

writeName();
1 голос
/ 06 марта 2012

Вы определили свою функцию как function writeName($name), что означает, что она ожидает аргумент.Но когда вы вызываете функцию, вы не передаете аргумент.Попробуйте изменить

writeName();

на:

writeName($name);
0 голосов
/ 06 марта 2012

Вы определили функцию writeName для приема одного параметра.При вызове функции вы должны указать этот параметр.

writeName($name);

или

writeName($_POST['name']);
0 голосов
/ 06 марта 2012

Причина в том, что вы объявили свою функцию writeName ожидающей аргумента с именем $name.Но когда вы вызываете функцию, вы не передаете никаких параметров.Вы должны использовать такую ​​функцию:

writeName("some string here");
0 голосов
/ 06 марта 2012

Вы не передаете параметр в функцию.Попробуйте это:

<?php
function writeName($name)
{
echo $name;
}
writeName($_POST['name']);
?>
0 голосов
/ 06 марта 2012

Вы должны передать параметр в функцию writeName($name);

или Вы можете установить значение по умолчанию для параметра функции:

function writeName($name = null)
{
   echo $name;
}
...