|
|
|
| Пример шаблона фабрики классов...но не работает...помогите разобраться!
<?
abstract class User
{
function __constгuct($name)
{
$this->name = $name ;
}
function getName()
{
return $this->name;
}
function hasReadPermission()
{
return true;
}
function hasModifyPermission()
{
return false;
}
function hasDeletePermission()
{
return false;
}
function wantsFlashInterface()
{
return true;
}
protected $name=NULL;
}
class GuestUser extends User
{}
class CustomerUser extends User
{
function hasModifyPermission()
{
return true;
}
}
class AdminUser extends User
{
function hasModifyPermission()
{
return true;
}
function hasDeletePermission()
{
return true;
}
function wantsFlashlnterface()
{
return false;
}
}
class UserFactory
{
private static $users = array("Энди"=>"аdmin", "Стиг"=>"guеst","Дерик"=>"сustоmеr");
static function Create($name)
{
if (!isset(self::$users[$name]))
{
}
switch (self::$users[$name])
{
case "guest": return new GuestUser($name);
case "customer": return new CustomerUser($name);
case "admin": return new AdminUser($name);
default: // Ошибка - неизвестный тип пользователя
}
}
}
function boolToStr($b)
{
if ($Ь == true)
{
return "Да<br>";
}
else
{
return "Нет<br>";
}
}
function displayPermissions(User $obj)
{
print "Права доступа пользователя:". $obj->gеtNаmе() ;
print "Чтение:". boolToStr($obj->hasRеаdРеrmissiоn());
print "Изменение:". boolToStr($obj->hаsМоdifуРеrmissiоn());
print "Удаление:" .boolToStr($obj->hаsDеlеtеРеrmissiоn());
}
function displayRequirements(User $obj)
{
if ($obj->wаntsFlаshlntеrfасе())
{
print "Для пользователя " . $Obj->gеtNаmе() . "требуется
Flаsh-интерфейс";
}
}
$logins = array("Энди" , "Стиг" , " Дерик " );
foreach($logins as $login )
{
displayPermissions(UserFactory::Create($login)) ;
displayRequirements(UserFactory::Create($logln)) ;
}
?>
Выводит ошибку:Catchable fatal error: Argument 1 passed to displayPermissions() must be an instance of User, null given, called in Z:\home\localhost\www\php5\pattern.php on line 170 and defined in Z:\home\localhost\www\php5\pattern.php on line 152 | |
|
|
|
|
|
|
|
для: Tryndamere
(24.05.2012 в 11:49)
| | Функции displayPermissions() вместо объекта, от класса-производного User вы передаете что-то не то, судя по всему просто пустую переменную... Так как тип параметра явно задан - PHP ругается. У вас массив $logins содержит обычные строки, никак не объекты, либо убирайте требование передавать объект, либо превращайте элементы массива в объекты. | |
|
|
|
|
|
|
|
для: cheops
(24.05.2012 в 13:38)
| | как это исправить? | |
|
|
|
|
|
|
|
для: Tryndamere
(24.05.2012 в 13:39)
| | Либо убрать User в определении функции displayRequirements(), либо сформировать массив $logins из объектов User, а не строк. | |
|
|
|