işlevine argüman geçen yardım

6 Cevap php
function get_tags_by_criteria($gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%", $tag="") {

ben sadece etiket argüman ve varsayılan işlettirmek istediğiniz zaman, nasıl yazıyorsunuz?

ive bu denedim ama işe yaramadı.

    get_tags_by_criteria("", "", "", "", "", "", computer);

6 Cevap

Sen bir ilişkisel dizi kullanarak adlandırılmış değişkenleri taklit edebilirsiniz:

function my_function($options)
 {
  extract($options);
 }

sonra arayın

my_function(array("parameter1" => "value1", "parameter2" => "value2"));

O, sağlam kontrol ve işlev içinde varsayılan değerler tablo ile kombine, benim için çok güzel çalışıyor.

Dezavantajı: Orada argümanlar belgelemek için hiçbir Phpdoc kongre ve IDE Yazarken sizin için kullanılabilir argümanlar göstermek mümkün olmayacaktır. Eğer IDE bağlı olarak, ya da güzel bir görünüm olmayabilir, @desc bloğunun içine kullanılabilir parametreleri girmek zorunda kalacaktır.

Bunun için bir geçici çözüm işlevinde tüm parametreleri ilan, ama hepsi ama ilk isteğe yapmaktır. İlki daha sonra değerleri içeren birleşmeli dizi olabilir.

Ne yazık ki bunu yapamam - belirlenmemiş isteğe bağlı argümanlar her zaman bir işlev bağımsız değişken listesinin sonunda kuyruk olmak zorunda. Bunun yerine, ne yapabilirim sizin belirlediğiniz ve daha sonra sahip işlev kontrolünü görmek için bir argüman NULL ise ve bunun yerine onu varsayılan değer atamak istemeyen argümanlar NULL için kullanmaktır.

PHP sadece mümkün değil.

CakePHP çerçeve genellikle bir dizi seçenek belirtmek için birleşmeli diziler kullanır. Hatta tek tek parametreleri veya bir ilişkisel dizi ya belirlemenizi sağlayacak. Bir örnek olarak model sınıfı üzerinde find methods bakın.

İşte fonksiyonu daha esnek yapmak benim girişimi:

<?php
function get_tags_by_criteria(
	$gender = '%', 
	$min_age_of_birth = '%', 
	$max_age_of_birth = '%', 
	$country = '%', 
	$region = '%', 
	$city = '%', 
	$tag = '') 
{
	if (is_array($gender))
	{
		$options = $gender;
		$gender = '%'; // reset to default
		extract($options);
	}

	$msg = "gender=$gender, min_age=$min_age_of_birth, " .
		"max_age=$max_age_of_birth, country=$country, region=$region, " .
		"city=$city, tag=$tag";
	return $msg;
}
?>
<p><?php echo get_tags_by_criteria('M'); ?></p>
<p><?php echo get_tags_by_criteria('M', 10); ?></p>
<p><?php echo get_tags_by_criteria(array(
	'country' => 'ca', 
	'tag' => 'sample')); ?></p>

Önce etiketi argüman koymak:

function get_tags_by_criteria($tag="", $gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%")

Ve bu gibi diyoruz:

get_tags_by_criteria(computer);

PHP geçen adlandırılmış bir parametre yoktur. Yaklaşık 4 parametreleri daha var ve onları çok isteğe bağlıdır Genellikle eğer bir dizi kullanarak düşünün ya da bunun yerine itiraz etmek isteyebilirsiniz:

function get_tags_by_criteria($args) {
  ...
}

get_tags_by_criteria(array('gender' => 'M', 'tag' => 'php'));

Sen açıkça yerine bir nesne kullanarak izin parametrelerini ayarlayabilirsiniz.