用户和公司可以登录到我的网站。
它们都有自己的对象。因此user将定义$users = new users (), company将定义$place = new Places()..
现在这工作良好,有一个页面,两者都应该看到的内容。在这个页面中有一个方法检查$users->id()是否与您登录时使用的相同。工作正常,但是当你使用company登录时,它会抛出错误,因为$users没有定义。
我该怎么办?我是否应该将$users设置为false,然后从中签出?或者在执行此语句之前确定您登录的内容,以便它不会执行。主意吗?
听起来你有一个基本的概念问题。
我建议不要有两个类——用户和公司——而是有一个用户类,"公司"只是用户的一种类型(或派生类)。然后你就不会有代码来检查哪些对象是有效的。这将大大简化应用程序逻辑。
听起来这里的Company只是一种特殊类型的User。
如果Company类型用户具有与user类型用户相似的模型,那么我将从user扩展Company来实现额外的功能。
class Company extends User
{
...
}
但是,如果这两种类型不同,它们唯一的共同点是可以登录,那么我会创建一个基类,用于登录和ID属性,然后让它们单独的模型定义其余部分。
abstract class BaseUser
{
public function getId()
{
return $this->id;
}
protected $id = null;
}
class User extends BaseUser
{
// user specific stuff here
}
class Company extends BaseUser
{
// company specific stuff here
}
如果没有更多的上下文,很难给出一个明确的答案。但是基本上你需要在调用$users对象的一个方法之前检查它是否存在。有很多方法可以做到这一点,最简单的可能是:
if (is_object($users)) {
// use the object
}
或者,您可以稍微改变一下结构,使用通用用户模型,并使用定义登录类型的字段:
<?php
public class User
{
/* Data fields */
public $logonType = "USER"; // or "COMPANY"
}
?>
使用它,您不必担心传递的对象类型,您可以简单地检查字段以确定登录类型,,除非您的两个模型具有完全不同的数据
除了Mike的注释之外,您还可以使用Factory来根据类型创建特定的用户。
class Factory
{
public static function create($type='user')
{
switch ($type) {
case 'user':
return new User();
break;
case 'company':
return new Company();
break;
default:
throw new Exception('Invalid type');
break;
}
}
}