Jawaban:
PHP 7.1 atau lebih baru (dirilis 2 Desember 2016)
Anda dapat secara eksplisit mendeklarasikan variabel yang ada nulldengan sintaks ini
function foo(?Type $t) {
}
ini akan menghasilkan
$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error
Jadi, jika Anda menginginkan argumen opsional, Anda dapat mengikuti konvensi Type $t = nullsedangkan jika Anda perlu membuat argumen menerima keduanya nulldan tipenya, Anda dapat mengikuti contoh di atas.
Anda dapat membaca lebih lanjut di sini .
PHP 7.0 atau lebih tua
Anda harus menambahkan nilai default seperti
function foo(Type $t = null) {
}
Dengan begitu, Anda bisa memberikan nilai nol.
Ini didokumentasikan di bagian dalam manual tentang Deklarasi Jenis :
Deklarasi dapat dibuat untuk menerima
NULLnilai jika nilai default dari parameter diatur keNULL.
function foo(Type $t)adalah hal yang SANGAT baik; lihat Referensi Null: Kesalahan Miliar Dolar
Mulai dari PHP 7.1, tersedia tipe nullable , karena keduanya berfungsi mengembalikan tipe dan parameter. Tipe ?Tdapat memiliki nilai dari Tipe yang ditentukan T, atau null.
Jadi, fungsi Anda bisa terlihat seperti ini:
function foo(?Type $t)
{
}
Segera setelah Anda dapat bekerja dengan PHP 7.1, notasi ini lebih disukai daripada function foo(Type $t = null), karena masih memaksa pemanggil untuk secara eksplisit menentukan argumen untuk parameter $t.
Seperti jawaban lain yang telah disebutkan, ini hanya mungkin jika Anda menetapkan nullsebagai nilai default.
Tetapi solusi berorientasi objek terbersih-tipe terbersih akan menjadi NullObject :
interface FooInterface
{
function bar();
}
class Foo implements FooInterface
{
public function bar()
{
return 'i am an object';
}
}
class NullFoo implements FooInterface
{
public function bar()
{
return 'i am null (but you still can use my interface)';
}
}
Pemakaian:
function bar_my_foo(FooInterface $foo)
{
if ($foo instanceof NullFoo) {
// special handling of null values may go here
}
echo $foo->bar();
}
bar_my_foo(new NullFoo);
NullFoountuk menimpa metode abstrak, meskipun mereka tidak memiliki makna (menurut definisi null).
if (something is null)cek, karena NullObject dimaksudkan untuk mencakup semua perilaku dari nilai yang tidak ada dan kolaborator luar tidak perlu tertarik pada apakah suatu objek tidak ada (null) atau tidak.