В чём различия аргументов и параметров функции?
Довольно частый вопрос, который задают новички на форумах и тематических сайтах. Параметры и аргументы функции - где и когда уместно применять то или иное понятие. На самом деле здесь всё очень просто. Рассмотрим несколько примеров (на PHP)
.Параметр функции
Параметр функции — это переменная, которая используется в функции при её объявлении (в круглых скобках).
Если параметров много, то они перечисляются через запятую. Другими словами, при создании функции мы задаём ей параметры, которые она ожидает принять.
// Объявление функции функция (параметр1, параметр2) { // Выполняемый код }
Параметр функции — это переменная в сигнатуре функции. Параметр функции - это локальная переменная функции, которая определяется на этапе объявления функции в круглых скобках. Обратиться к параметрам можно только внутри функции, снаружи они не доступны.
<?php class User { private $name; private $email; // Объявление функции и определение её параметров на вход public function createUser(string $name, string $email) { $this->name = $name; $this->email = $email; } }
Есть класс User
, который содержит метод public function createUser(string $name, string $email)
, который в свою очередь ожидает на вход параметры: $name
и $email
.
Аргумент функции
Аргумент функции — это выражение/значение, которое передается в функцию (метод) при её (его) вызове. Аргумент(ы) указывается в круглых скобках при вызове функции.
// Вызов функции функция (аргумент1, аргумент2);
Аргумент функции — фактическое значение переменной, которая передается в функцию. Аргументы тоже перечисляются через запятую и их количество должно совпадать с количеством параметров, которые функция ожадает на вход.
$user = new User(); // Вызов функции и передача в неё аргументов $user->createUser('Вася', 'Пупкин');
Здесь мы создаём экземпляр класса User
(объект) и передаём в метод createUser()
аргументы: Вася
и Пупкин
.
После того, как мы передали нужные аргуметны в функцию, они сразу же становятся её параметрами.
Пример
<?php namespace cms\base\Models; class User { private string $name; private string $email; // Объявляем функцию и определяем нужные параметры для её выполнения public function createUser(string $name, string $email): void { /** * Вызываем функцию и передаём туда аргумент, * который является параметром функции createUser() */ $this->setName($name); $this->setEmail($email); } /** * Параметр $name * @param string $name */ private function setName(string $name): void { $this->name = $name; } /** * Параметр $email * @param string $email */ private function setEmail(string $email): void { $this->email = $email; } /** * Функция без параметров * @return string */ public function getEmail(): string { return $this->email; } /** * Функция без параметров * @return string */ public function getName(): string { return $this->name; } }
Использование класса:
// Создание объекта $user = new User(); // Вызывавем функцию с аргументами $user->createUser('Вася', 'Пупкин'); // Вызов функции без аргументов. Сама функция никаких параметров не требует $user->getName(); $user->getEmail();
Всё оказалось значительно проще, чем казалось.