Null Object Pattern In PHP
کتابخانه الکترونیکی دیتا ساینس
پترن Null Object برای جلوگیری از نوشتن if else جهت بررسی نال بودن یک شی، به کار میرود. به عبارتی براساس این پترن، برنامه به نحوی نوشته میشود که برنامه به حالت واقعیتر نزدیک میشود و کلاسها مسئولیت نمایش و بررسی وضعیت نال (null) بودن رو به عهده دارند.
مثال
فرض کنید وبسایتی داریم که دو نوع عضویت دارد، عادی و ویژه. این وبسایت به مانند سایت آپارت، یک بخش برای نمایش ویدئوها دارد. همه کاربران امکان مشاهده ویدئوها را دارند اما فقط کاربران ویژه توانایی مشاهده آمار ویدئوها را دارند. نمونه کدهای زیر طوری پیاده سازی شدهاند که از if else برای بررسی null بودن امکان مشاهده ویدئو توسط کاربران عادی جلوگیری کرده است. به عبارتی
if (!is_null($obj)) { $obj->callSomeFunction(); }
will be $obj->callSomeFunction();
<?php
class VideoController
{
// Dependency Injection Of UserInterface
public function __construct(private UserInterface $user)
{
}
/**
* Show video stats
*/
public function showStats()
{
// Let's assume this videoStats is only available when the user is premium
// not for the standard user
$this->user->videoStats();
}
}
<?php
interface UserInterface
{
public function videoStats();
}
<?php
class PremiumUser implements UserInterface
{
public function videoStats()
{
print '70% video watched!'; // Hard coded for demo purpose
}
}
<?php
class NullUser implements UserInterface
{
public function videoStats()
{
// do nothing
return '';
}
}
<?php
//VideoController
$premiumUser = new VideoController(new PremiumUser());
$premiumUser->showStats();
$standardUser = new VideoController(new NullUser());
$standardUser->showStats();