Daha önceleri C# ve Dart gibi dillerden aşina olduğumuz Php 8 ile yeni gelen named arguments özelliğine değinmek istiyorum. Öncekle Php’ de parametrelere değer geçerken hele ki fazla parametre varsa herkes gibi benim de zorlandığımı hatta fonksiyonları parametrelerine teker teker bakmak için php.net de detaylıca parametre sıralamalarına baktığımı iyi hatırlarım:)
Makalemize kod örnekleriyle devam edelim değil mi?
class UserDto
{
public function __construct(
public string $name,
public string $email,
public int $status,
) {}
}
$data = new UserDto(
status: $input['status'],
email: $input['email'],
name: $input['name'],
);
Koddan da göreceğiniz gibi named arguments ile parametre sıralaması önemini yitiriyor. Tabii ki burada küçük bir hatırlatma yapmak istiyorum. Method parametreleri oluşturulken zoraki parametreler önce opsiyonel olanlar ise son sıralara koymak iyi bir best practicedir.
Php 8 öncesinde bu tip bir kullanım varken.
ftp_get(
ftp_connect($ftp_server),
"php://output",
"local.zip",
FTP_BINARY,
);
Php 8 named argument ile daha temiz ve okunurluğu daha yüksek kod yazabiliyoruz.
ftp_get(
FTP\Connection $ftp,
string $yerel_dosya,
string $uzak_dosya,
int $kip = FTP_BINARY,
int $başlangıç = 0
): bool
Böyle bir güzelliğe sahip olsak da Php bize daha bir esneklik sağlıyor. Bu iki kullanımı beraber kullanabiliyoruz.
$userDto = new UserDto(
$input['status'], // named argument kullandan..
email: $input['email'],
name: $input['name'],
);
Parametre sıralamasını istediğmiz gibi kullanabiliyoruz.
$userDto = new UserDto(
email: $input['email'],
$input['status'],
name: $input['name'],
);
Parametrelerimizi array spreading olarak da geçebiliyoruz.
$input = [
'status' => 11,
'name' => 'Recai',
'email' => 'recai@recaicansiz.com',
];
$userDto = new UserDto(...$input);
Ama geçersiz array imizde geçersiz bir field olursa hata alıyoruz.
$input = [
'status' => 11,
'name' => 'Recai',
'email' => 'recai@recaicansiz.com',
'unknownProperty' => 'This is not allowed', // Error!
];
$userDto = new UserDto(...$input);
Array imzin içerisinde named argument kullanmadan da parametre geçebiliyoruz.
$input = [
'Recai',
'email' => 'recai@recaicansiz.com',
'status' => 11
];
$userDto = new UserDto(...$input);
Diğer makalelerde buluşmak dileğiyle. Sevgiler.
İlk Yorumu Siz Yapın