有什么办法可以在课堂上分组某些功能吗?有点像创建子类。
例如,我该怎么办?
className::food::fruit('lemon');
有可能吗?
答案 0 :(得分:2)
您无法直接将单个类中的函数分离到基于类名的不同引用路径中。最接近的可能是使用命名空间(可从PHP 5.3+获得)并在命名空间中创建多个类,每个类都有自己的一组函数。例如:
namespace className;
class food {
static function fruit() {
}
}
将被
调用className\food::fruit('lemon');
调用命名空间“className”是没有意义的 - 仅用于匹配您的示例。
如果您需要更多组级别,命名空间也可以有很多级别的嵌套。
请注意,这与您的示例根本不同,因为根据您的示例,这将最终实现多个类来实现功能分组,我认为您正在寻找类似的解决方案,但只有一个类 - 这不是可能的。
请注意,这与显示继承的其他答案不同 - 因为它们提供了不同的分组位置来定义函数,但不允许使用截然不同的方式在现有对象上引用它们或静态地从类本身引用它们。
此处提供更多信息:http://php.net/namespaces
注意 - 我确实认为继承是基于您的示例代码的正确方法 - 命名空间听起来不太适合给出的示例 - 但是如果您想要“子类”,如您的问题所述,这可能更接近你正在寻找的东西。
两者的结合可能会带来最好的结果(并且是非常常见的做法)。
答案 1 :(得分:0)
PHP支持继承,因此您可以编写一个水果类,然后编写另一个继承水果的子类柠檬。
答案 2 :(得分:0)
请参阅此示例以了解如何使用类扩展和抽象类。
// Abstract class can regisiter functions that MUST be implemented by extending
// classes
abstract class Fruit {
public function type();
}
// Lemon extends Fruit, so it must implement its own version of the type() method.
class Lemon extends Fruit {
public function type() {
return "Lemon";
}
}
// Grape also extends Fruit, but this will create an error because it is not
// implementing the type() method in the abstract class Fruit
class Grape extends Fruit {
}
$lemon = new Lemon();
echo $lemon->type();
// This will give you an error because the Grape class did not implement the
// type() as the Fruit class requires it to.
$grape = new Grape();
echo $grape->type();
PHP文档在解释类扩展方面做得很好。