Пользовательские функции PHP, (я новичок нужна помощь) - PullRequest
2 голосов
/ 08 июля 2011

Я понимаю, что могу определить функцию следующим образом:

<?php 
    function say_hello() {
        echo "hello world!";
    }

    say_hello();
?>

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

Что я не понимаю, так это «передача данных в аргументы внутри функции».Я запутался, что означает в .

Из одного из уроков, которые я изучал, у меня есть эта функция:

<?php 
   function say_helloTWO( $word ) {
       echo " {$word} hello world a second time ";
   }

   say_helloTWO( "my name is mike");
?>

Это печатает на экране

меня зовут Майк Хелло Уорлд во второй раз

Когда я проверяю функцию с аргументом "my name is mike", она выводится на экран, но я не понимаю как это работает.Переменная $word нигде не была объявлена, поэтому, если я извлекаю "$word" из эха, то только "hello world a second time "показывает без my name is mike.

Это заставляет меня поверить, чтогде-то в этом блоке кода определено $word, верно?

Ответы [ 8 ]

2 голосов
/ 08 июля 2011

Во второй функции $word объявляется в определении функции function say_helloTWO( $word ).

Таким образом, функция ожидает 1 параметр, который будет присвоен переменной $word для использования в этой функции.

Поэтому, когда вы вызываете say_helloTWO( "my name is mike");, вы передаете 1 параметр («меня зовут Майк») в функцию say_helloTWO.Этот 1 параметр присваивается 1-й переменной в определении функции и поэтому доступен внутри функции как $word.

Имеет смысл?

1 голос
/ 08 июля 2011
<?php 
   function say_helloTWO( $word ) {
       echo " {$word} hello world a second time ";
   }

   say_helloTWO( "my name is mike");
?>

В этом коде 'объявление' переменной $word выполняется внутри объявления функции.Как вы видите в этой строке function say_helloTWO( $word ) {, вы можете найти $word в этой строке.Этого достаточно, чтобы синтаксический анализатор PHP знал, что первый аргумент должен называться словом внутри этой области функций.Затем функция выводит эту переменную в более поздней строке echo " {$word} hello world a second time ";, где снова присутствует $word, выводит оба значения, заданные в качестве значения первого аргумента в этой строке say_helloTWO( "my name is mike");.

Хороший вопрос.

1 голос
/ 08 июля 2011

Вам нужно прочитать это: http://php.net/manual/en/functions.arguments.php

1 голос
/ 08 июля 2011

Это считается действительной декларацией. Он определяется как аргумент при вызове функции.

<?php
    function my_name_is ($name) {
        echo "Hello, my name is " . $name;
    }
    my_name_is('mike');
    // returns 'Hello, my name is mike'
?>

Поскольку при вызове функции в качестве аргумента указывается mike, $ name становится mike. Это просто, как работают функции.

EDIT:

Это особое правило. $ name не нужно объявлять, потому что оно будет определено при вызове функции. PHP это понимает. Если вы не предоставите аргумент, он все еще определен, он просто пустой ... Я верю.

1 голос
/ 08 июля 2011

В этом случае определение функции имеет один аргумент.

function say_helloTWO( $word ) // $word is the name of this argument

Когда вы вызываете функцию в своем коде, первое, что вы передаете в скобках, будет передано в качестве первого аргумента. Поэтому в вашем примере строка "my name is mike" передается в функцию и присваивается переменной $ word.

Если мы расширим это и получим функцию, которая принимает два аргумента, подобные этому

function say_helloTHREE( $word, $secondArg )

Тогда эта функция будет ожидать, что в нее будут переданы два аргумента. Первый аргумент будет назначен $ word, а второй аргумент будет назначен $ secondArg.

0 голосов
/ 08 июля 2011

это наводит меня на мысль, что где-то в этом блоке кода определено $ word, верно?

Нет, $ word не определено в функциональном блоке, ему присваивается значение "my name is mike", когда вы используете вызов.

Другими словами, $ word определяется при вызове функции:

/* here you are defining word to "my name is mike" */
say_helloTWO( "my name is mike");

/* here you are defining word to "my name is jack"*/
say_helloTWO( "my name is jack");

Если вышесказанное все еще не имеет для вас особого смысла, то, возможно, вам придется вернуться к основам и изучить, что является функцией в мире программирования.

0 голосов
/ 08 июля 2011

Если вы сделали:

function say_helloTWO( $word1, $word2, $word3 )

и называется:

say_helloTWO("a", "b", "c");

Это будет вызывать say_helloTWO и установить переменную $word1 в "a", $word2 в "b" и $word3 в "c"

Эти три переменные определены в say_helloTWO на время выполнения этой функции.

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

function quadratic( $a, $b, $c ) { 
    $x = ( $b + sqrt( (b*b - 4*a*c) ) )/ 2*a;
    return $x;
}

Затем, вместо того, чтобы каждый раз переписывать код для решения квадратичной задачи, вы можете назвать его так:

$y = quadratic (1, 2, 3);

Это установит $ a в 1, $ b в 2 и $ c в 3 и сохранит результат в $ y.

Вы можете считать квадратичную функцию своего рода «мини-программой», независимой от остальной части вашей программы, $ a, $ b и $ c применяются только внутри функции quadratic.

0 голосов
/ 08 июля 2011

Передается как параметр. Так что это было уже объявлено в скобках

...