我想在Objective-C中做一些类类,在一个文件中定义一个类,在那里实现一些核心方法,然后在没有子类或接口的情况下在另一个文件中实现一些辅助方法,只需"继续"该类.
有可能在PHP?
hel*_*ert 37
从PHP 5.4开始,您可以使用Traits完成此操作.引用官方文档:
Traits [启用]开发人员可以在生活在不同类层次结构中的几个独立类中自由地重用方法集.[...] Trait类似于一个类,但仅用于以细粒度和一致的方式对功能进行分组.无法自行实例化Trait.它是对传统继承的补充,可以实现行为的横向组合; 也就是说,类成员的应用程序不需要继承.
使用特征允许您存储辅助方法,以解决中心位置的交叉问题,并在您需要的任何类中使用这些方法.
// File "HelperMethodTrait.php"
trait HelperMethodTrait
{
public function myIncredibleUsefulHelperFunction()
{
return 42;
}
}
// File "MyClass.php"
class MyClass
{
use HelperMethodTrait;
public function myDomainSpecificFunction()
{
return "foobar";
}
}
$instance = new MyClass();
$instance->myIncredibleUsefulHelperFunction(); // 42
Run Code Online (Sandbox Code Playgroud)
Ph.*_*h.T 15
先验的PHP doest没有通过语言构造为您提供此功能,整个类必须在一个文件中.
现在有一些技巧可以解决这些问题,但它们的CPU要求非常高:
例如,您可以在不同文件之间分离类,然后加载文件并使用整个代码构建单个字符串,然后执行eval(字符串)来解释类并将它们构建到可运行代码区域中.
因为很多原因,不是一个好主意
如果您的唯一目标是使类定义文件更小,则可以在函数定义中包含文件
class MyClass {
public function doStuff($foo,$bar) {
global $quz;
include('MyClass.doStuff.php');
}
}
Run Code Online (Sandbox Code Playgroud)
在包含中,您的本地范围适用(将定义 $foo、$bar 和 $quz)
我不确定开销是什么 - 包含似乎发生在运行时,而不是编译时(因为包含实际上可以返回一个值 ..)
2 美分,*-派克