2015-11-04 140 views
1

我是OOP & PHP的新手。我尽可能地遵循OOP方法,对于我的规范中的每个突出的“名词”,我都有一门课,这很好。面向对象和PHP运行时

但它让我思考编译和运行时。

如果我开发了一个综合的类,它具有相关的属性,setter和getter以及一系列方法,那么最终的类可以很容易地运行到几百行代码中。

如果我然后使用这个类,(例如)我只调用一个方法没有整个类被解析&转换和内存分配前执行?

我有这个权利吗?当然,程序方法会更有效率(包含内的函数)还是在实际运行时这是可忽略的?

+4

你似乎认为包含包含函数的文件不需要解析和“转换”或分配内存 –

+0

不,我确实没有,但它确实更有效地解析和转换一个函数而不是整个类? – JAMMac

+3

文件被解析/ etc是否包含类或函数....假设你有一个包含20个函数的文件,但只能调用其中一个函数.... PHP仍然解析整个文件,而不仅仅是它的函数预测/猜测当你包含该文件时你将要调用 –

回答

0

由于所有包含的文件都被解析,并且几百行代码并不多,但如果您希望的话,您可以简单地考虑一些适用于此类函数的静态辅助方法(如果可能的话)。

结合使用自动加载器,您可以真正地降低质量包括。

实例之前

一类,你总是有:

class Helper { 
    public static function createFolder() { 
     // some stuff 
    } 

    public static function myEncoder() { 
     // some stuff 
    } 

    public static function getDomElementByID() { 
     // some stuff 
    } 

    public static function cleanupString() { 
     // some stuff 
    } 
} 

举例算账:

分裂您的 “庞大” 的类,并尝试组在它的方法。

类的StringHelper

class StringHelper { 
    public static function cleanupString() { 
     // some stuff 
    } 
} 

类FilesystemHelper

class FilesystemHelper { 
    public static function createFolder() { 
     // some stuff 
    } 
} 

类DomHelper

class DomHelper { 
    public static function getDomElementByID() { 
     // some stuff 
    } 
} 

类EncodingHelper

class EncodingHelper { 
    public static function myEncoder() { 
     // some stuff 
    } 
} 

自动加载

创建一个自动加载类,这里更多的信息=>PHP Docs

自动加载器将只包括文件当你真正需要它。例如,如果您正在呼叫:

$stringHelper = new StringHelper(); 
// or 
StringHelper::someStaticFunction(); 

真正让爆炸工作的是命名空间和自动加载器的组合。看看这里=>PHP Docs (namespaces)

+0

你的'Helper'类与具有函数的文件完全一样。 – PeeHaa

+0

@PeeHaa,是的,但是我建议将这个例子'Helper'class分成不同的文件,如果可能的话使用自动加载器,所以你不包括2000行的一些功能,但只有200例如。 – swidmann

2

至于

但它让我想起了编译和运行。

我觉得@马克comment是最中肯:

大多数基于类的系统使用自动加载,只包括类/正在积极要求来处理请求的文件.....

具有单一职责的原子类,从依赖注入容器自动加载将产生少量未使用的代码。

如果我然后使用这个类,由此(例如)我只调用一个方法没有整个类得到解析&转换和内存分配前执行?

冗长的类有时可以分成更小的类,这会限制用于执行单个方法的代码量。我认为这里的关键是single responsibility principle,它引发的类将需要他们运行被调用函数所需的最少资源。