php - функции, аргументы

246
06 ноября 2017, 23:26

Всем привет. Вопрос по PHP. Параметры указываются в определении функции, внутри круглых скобок, и являются ее локальными переменными, т.е. они видны только в ее теле, если параметров несколько, то они указываются через запятую. Но в примере параметр $color указываются вне функции. Объясните пожалуйста. Спасибо.

 <?php
 
  // Определение функции
  function my_car($car, $color) {  // Указано два параметра: $car и $color
    echo "Марка моей машины: $car и она имеет $color цвет";
  }
  
  $color = 'красный';
  
  // Вызываем функцию и передаем ей два аргумента
  my_car('BMW', $color);  // Аргументы - строковой литерал и переменная
 
?>
Answer 1

Просто переменную вне функции и внутри функции назвали одинаково. Но это абсолютно разные переменные. С таким же успехом можно было просто написать:

function my_car($car, $color) { 
    echo "Марка моей машины: $car и она имеет $color цвет";
}
$this_is_my_var_with_some_value = 'красный';
my_car('BMW', $this_is_my_var_with_some_value); 
Answer 2

Вы все правильно начали, Определение функции.
Так вот, для определения используется зарезервированное слово function далее идет название_ функции и прототип функции (где перечисляются параметры, через запятую), а дальше следует тело функции {}, где будут видны эти переменные. То, что переменная $color определена вне функции - эту переменную, функция не видит, хоть переменная и находится в глобальной области видимости.
Функция имеет локальную область видимости.
Для того, чтобы функция увидела переменную, вы ее и передаете в прототип функции:

my_car('BMW', $color);

Есть еще конструкция global - которая приглашает переменную в локальную область видимости функции.

$color = 'red';
function my_car() {
    global $color;
    return $color;
}
echo my_car(); // red

Конечно не рекомендую использовать эту конструкцию.

В вашем случае может еще появиться переменная $car - которая также будет передаваться в прототип функции.

$car = 'BMW';
$color = 'black';
my_car($car, $color);

Примерно такое-же происходит и с ООП:

class Car {
    public $car, $color;
    public function __construct($car, $color) {
       $this->car = $car;
       $this->color = $color;
    }
}
READ ALSO
Twitch трансляция [требует правки]

Twitch трансляция [требует правки]

Как добавить twitch трансляцию на свой сайт?

264
Правильный подход к пагинации

Правильный подход к пагинации

Доброго времени суток, в каждом своем проекте строю пагинацию по новому, тк

246
Как вывести username из таблицы users по id в сессии?

Как вывести username из таблицы users по id в сессии?

Есть таблица usersВ ней есть username и id столбцы

252