我正在创建一个网站,但是,为了进一步提高我的编码技巧,我正在尝试使用OOP的力量来做到这一点。
我正在使用类来验证表单输入,所以认为我将拥有"父母"验证类,然后为提交的每个表单(即登录类,注册类等)的子类正确的值进入数据库等。
我所看到的代码是父母是由孩子的构造函数构造的。但是,我没有做到这一点,但是我的班级似乎都起作用了吗?
有人可以向我解释为什么我们给孩子打电话给父母构造者吗?另外,我的代码仅能使用,因为我在父母中具有"公共"功能(方法)?(这可能是一个问题)?
我的代码(清晰的删节版本)如下:
class Validation_Class
{
public function __construct()
{
// constructor not needed
}
public function is_genuine_email_address($email) {
// code to validate email are genuine here...
}
}
我的孩子课看起来像...
class Login_Class extends Validation_Class
{
public function __construct()
{
// I don't call parent::__construct() from here
// should I be doing?
// I can still access parent methods with $this->is_genuine_email_address
}
}
我的验证_class中我的所有函数(方法)是" public",当我实例化我的孩子课时,我可以使用以下方式调用任何验证类方法:
$className = "Login_Class";
$thisClass = new $className();
呼叫parent constructor
不是不确定的class Parent {
//maybe just holding some constants
public $database = 'mydatabase';
}
class Child extends Parent {
public function myFunction() {
if ($this->database == 'myDatabase') {
// you can access the parents data without calling a constructor
}
}
}
很好。但是,如果您想从父母必须做的事情中受益才能正常工作,则可能需要对父母__construct
的呼叫 - 例如
class Parent {
public $database = null;
public function __construct() {
// example -> login to database
}
}
class Child extends Parent {
public function __construct() {
parent::__construct();
// .. further code
}
public function myFunction() {
// do something, like executing a query
$this->database->executeQuery($SQL);
}
}
在php" oop"中,这不是您在其他语言中看到的真实的OOP,构造函数只是实例化结果对象的速记。如果我们一遍又一遍地打电话
,那将是一个地狱$object = new MyClass();
$object->instantiate()
因此,调用__construct
或new ClassName()
更容易。但是,班级成员在班级结构中称为构造函数并不是绝对需要的。当然,除非在一个班级的父母中需要一定的初始化才能让继任者正常工作。
从架构的角度来看,这没有多大意义。因为使用OO继承不仅是在代码中扩展类,而且还以一种有意义的方式设计和构造类层次结构。
从逻辑结构邮票点我不会想象从验证类继承的登录类。相反,我可能将验证类对象作为登录类的成员,并使用其功能执行验证。
从继承的角度来看,请务必记住,我们应该努力拥有代表"对象"而不是"动作"的类。当然,我们可以有用于登录和验证操作的课程,但是动作很少以亲子方式继承。他们可以更好地补充班级成员。
调用父类,无论是构造函数还是标准方法。如果您要在父母中指定的动作,并且孩子将在孩子中定义更多细粒度的动作。
拇指的规则是,当您穿越继承的阶级链时,它变得越来越通用,并且随着您的穿越,它变得越来越专业。
而不是使用继承,使用策略模式进行验证是一种流行的模式之一。这使代码更加模块化和扩展,
使用策略设计模式验证传入数据