PHP类和函数


PHP classes and functions

在PHP中,我有三个独立的类,它们都在执行完全不同的任务。然而,许多函数在两个或全部三个类之间共享。

  • 类别search
  • 类别data_table
  • 类别add_and_edit

这三个类都有一个函数来纠正苏格兰和爱尔兰名称(Mac Mc O'等),两个类共享一个字母头函数,不同的两个类共有第三个函数。

是否可以将共享函数集中到一个文件中,并在需要时用类调用它们?

您需要的是一个继承结构。

Exmaple:

class meta{
   protected function add(args){
   }
   protected function edit(args){
   }
   protected function delete(args){
   }
}
/*@description This class get all the 3 methods from the meta class*/
class search extends meta{
}
 /*@description This class get all the 3 methods from the meta class*/    
class data_table extends meta{
}
/*@description This class get all the 3 methods from the meta class*/    
class add_and_edit extends meta{
}

使用受保护的函数向公共API隐藏函数(禁止从类外调用这些函数),但仍保留继承(子)类以通过继承获得这些函数的能力。

我认为最好使用base类来保存您的通用函数,并将其扩展到其他类中。必须定义通用函数protected

是的,这将是这里的逻辑解决方案。我会创建一个名为"parent"的父类,然后扩展其他类:

class child extends parent {}

将通用方法移动到父类。然后,每个类仍然可以访问这些通用方法,并且您的代码应该像以前一样工作,除非您正在进行静态方法调用。

解决方案1:继承

你的问题很不具体,这将反映在我的回答中。我想你要找的是遗产。

继承允许您有一个带有函数的类,然后让其他类继承这些函数。

class A {
  public function x();
}
class B extends A {
  public function y();
}

现在,类B将同时具有方法x()和y()。你甚至可以进一步嵌套,例如

class C extends B {
  public function z()
}

因此,C现在拥有所有的x()、y()和z()。此外,您可以让一个类从多个类继承。不过,在继承时要小心,最终可能会出现复杂的类层次结构、紧密耦合和大量依赖关系。

解决方案2:静态类

您可以将名称更正函数与其他类分离,并将它们存储在一个静态类中,然后从任何需要的地方调用,例如

class A {
  public static function nameThingy() {
    // ...
  }
}
class B {
  public function something() {
    A::nameThingy();
  }
}
class C {
  public function somethingElse() {
    A::nameThingy();
  }
}

您可以创建一个控制器类,并让这三个类中的每一个都扩展到控制器之外。

<?php 
class app_controller {
    public static function name_correction( $name ) {
        // process
        return $fixed_name;
    }
} 
class search extends app_controller  {
    // ...
    private function action() { 
        // code ...
        $do_something = self::name_correction( $name );
        // code 
   } 
}
class data_table extends app_controller  {
    // ...
    private function another_action() { 
        // code ...
        $do_something = self::name_correction( $name );
        // code 
   } 
} 
class add_and_edit extends app_controller  {
    // ...
    private function another_action() { 
        // code ...
        $do_something = self::name_correction( $name );
        // code 
   } 
}