Intereting Posts
Убедитесь, что несколько строк пусты Поместите изображение в другое изображение с помощью PHP PHP: проверить строку для определенных слов CodeIgniter и SimpleTest – Как сделать свой первый тест? Задайте несколько полей с одним запросом обновления Возьмите файл типа ввода (HTML) на JavaScript и отправьте электронное письмо с помощью PHPmailer Проверьте, является ли IP-адрес приватным Файл Laravel не существует – загрузка файла cakephp isAuthorized () не называется Отправка информации в ngnix из php на том же сервере без http Динамическое создание флажков Пользовательские сообщения с одним и тем же слизком. Перенаправление на неправильный пост с одинаковым слизнем WordPress Theme Customizer – добавление области для перемещения пользователей и организации виджетов PHP Тернарный оператор в ассоциативном массиве, чтобы установить как ключ, так и значение? Я не могу запросить с помощью% в коллекции phalcon

Именованные аргументы в PHP

В C # появилась новая функция с 4.0 под названием Named Arguments и хорошо сочетается с необязательными параметрами.

private static void writeSomething(int a = 1, int b = 2){ // do something here; } static void Main() { writeSomething(b:3); // works pretty well } 

Я использовал эту опцию, чтобы получить некоторые значения параметров от пользователей.

В PHP я не могу найти ничего подобного, кроме необязательных параметров, но я принимаю выполнение функции $.fn.extend (jQuery):

 function settings($options) { $defaults = array("name"=>"something","lastname"=>"else"); $settings = array_merge($defaults,$options); } settigs(array("lastname"=>"John"); 

Мне интересно, какие решения вы используете или используете в той же ситуации.

Как вы выяснили, именованные аргументы не существуют в PHP.

Но одним из возможных решений могло бы стать использование одного массива в качестве уникального параметра – поскольку элементы массива можно назвать:

 my_function(array( 'my_param' => 10, 'other_param' => 'hello, world!', )); 

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

 function my_function(array $params) { // test if $params['my_param'] is set ; and use it if it is // test if $params['other_param'] is set ; and use it if it is // test if $params['yet_another_param'] is set ; and use it if it is // ... } 

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

Им нужно будет читать документацию каждый раз, когда они захотят назвать вашу функцию, – это не то, что она любит делать, не так ли?

Дополнительное примечание: IDE также не смогут давать подсказки; и phpdoc тоже будет нарушен …

Вы можете обойти это, имея массив, такой как $array= array('arg1'=>'value1'); А затем пусть функция принимает массив, такой как function dostuff($stuff); Затем вы можете проверить аргументы, используя if(isset($stuff['arg1')){//do something.} Внутри самой функции

Это просто работа, но, возможно, это может помочь

Вы можете подделывать необязательные аргументы стиля C ++ (т. Е. Все необязательные аргументы находятся в конце), проверяя для заданных переменных:

 function foo($a, $b) { $x = isset($a) ? $a : 3; $y = isset($b) ? $b : 4; print("X = $x, Y = $y\n"); } @foo(8); @foo(); 

Это вызовет предупреждение, которое я подавляю с помощью @ . Не самое элегантное решение, но синтаксически близко к тому, что вы хотели.


Редактировать. Это была глупая идея. Вместо этого используйте переменные аргументы:

 // faking foo($x = 3, $y = 3) function foo() { $args = func_get_args(); $x = isset($args[0]) ? $args[0] : 3; $y = isset($args[1]) ? $args[1] : 3; print("X = $x, Y = $y\n"); } foo(12,14); foo(8); foo();