在PHP中,我有3个单独的类,它们都完成不同的任务。但是,在两个或所有三个类之间共享许多函数。
search
data_table
add_and_edit
这三个类都有一个纠正苏格兰和爱尔兰名字的功能(Mac Mc O'等),两个类共享一个字母标题函数,另外两个类共享第三个函数。
是否可以将共享函数合并到一个文件中,并在需要时使用类调用它们?
答案 0 :(得分:1)
您需要的是继承结构。
〔实施例:
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中的函数(禁止从类外部调用这些函数),但仍然保留继承(子)类通过继承获取这些函数的能力。
答案 1 :(得分:0)
是的,这将是合乎逻辑的解决方案。我会创建一个父类,cay称为'parent',然后扩展其他类:
class child extends parent {}
将常用方法移动到父类。然后每个类仍然可以访问这些常用方法,并且您的代码应该像以前一样工作,除非您正在进行静态方法调用。
答案 2 :(得分:0)
您的问题非常不明确,将在我的回答中反映出来。我认为你所寻找的是继承。
继承允许您拥有一个带有函数的类,然后让其他类继承这些函数。
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()的全部。此外,您可以让一个类继承多个类。但要注意继承,最终可能会出现复杂的类层次结构,紧密耦合以及大量的依赖。
您可以将名称更正功能与其他类别分开,并将它们存储在静态类中,并从您需要的地方调用,例如。
class A {
public static function nameThingy() {
// ...
}
}
class B {
public function something() {
A::nameThingy();
}
}
class C {
public function somethingElse() {
A::nameThingy();
}
}
答案 3 :(得分:0)
您可以创建一个控制器类,并让控制器中的三个类extend中的每一个都出现。
<?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
}
}
答案 4 :(得分:0)
我认为最好使用base
类来保存一般函数并将其扩展到其他类中。必须定义常规函数protected