Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
面向对象;PHP运行时_Php_Oop - Fatal编程技术网

面向对象;PHP运行时

面向对象;PHP运行时,php,oop,Php,Oop,我是OOP和PHP新手。我已经尽我所能地遵循了OOP方法,因此对于规范中的每个突出的“名词”,我都有一个类,这很好地工作 但这让我想到了编译和运行时 如果我开发一个具有相关属性、setter和getter以及一系列方法的综合类,那么生成的类可以轻松地运行几百行代码 如果我使用这个类,例如,我只调用一个方法,那么整个类在执行之前不是都要被解析和转换并分配内存吗 我说得对吗?因为过程方法肯定会更有效(包含中的函数),或者在实际运行时这是可忽略的?因为所有包含的文件都会被解析,几百行代码并不是那么多,

我是OOP和PHP新手。我已经尽我所能地遵循了OOP方法,因此对于规范中的每个突出的“名词”,我都有一个类,这很好地工作

但这让我想到了编译和运行时

如果我开发一个具有相关属性、setter和getter以及一系列方法的综合类,那么生成的类可以轻松地运行几百行代码

如果我使用这个类,例如,我只调用一个方法,那么整个类在执行之前不是都要被解析和转换并分配内存吗


我说得对吗?因为过程方法肯定会更有效(包含中的函数),或者在实际运行时这是可忽略的?

因为所有包含的文件都会被解析,几百行代码并不是那么多,但是如果您愿意,您可以简单地考虑一些用于此类函数的静态助手方法(如果可能的话)

与自动加载器结合使用,您可以真正降低质量

前面的示例

一个类,您始终包括:

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
    }
}
class FilesystemHelper {
    public static function createFolder() {
        // some stuff
    }
}
class DomHelper {
    public static function getDomElementByID() {
        // some stuff
    }
}
class EncodingHelper {
    public static function myEncoder() {
        // some stuff
    }
}
类FilesystemHelper

class StringHelper {
    public static function cleanupString() {
        // some stuff
    }
}
class FilesystemHelper {
    public static function createFolder() {
        // some stuff
    }
}
class DomHelper {
    public static function getDomElementByID() {
        // some stuff
    }
}
class EncodingHelper {
    public static function myEncoder() {
        // some stuff
    }
}
类DomHelper

class StringHelper {
    public static function cleanupString() {
        // some stuff
    }
}
class FilesystemHelper {
    public static function createFolder() {
        // some stuff
    }
}
class DomHelper {
    public static function getDomElementByID() {
        // some stuff
    }
}
class EncodingHelper {
    public static function myEncoder() {
        // some stuff
    }
}
类编码助手

class StringHelper {
    public static function cleanupString() {
        // some stuff
    }
}
class FilesystemHelper {
    public static function createFolder() {
        // some stuff
    }
}
class DomHelper {
    public static function getDomElementByID() {
        // some stuff
    }
}
class EncodingHelper {
    public static function myEncoder() {
        // some stuff
    }
}
自动加载器

class StringHelper {
    public static function cleanupString() {
        // some stuff
    }
}
class FilesystemHelper {
    public static function createFolder() {
        // some stuff
    }
}
class DomHelper {
    public static function getDomElementByID() {
        // some stuff
    }
}
class EncodingHelper {
    public static function myEncoder() {
        // some stuff
    }
}
创建自动加载器类,更多信息在此处=>

自动加载程序仅在您实际需要时才包含文件。例如,如果您正在呼叫:

$stringHelper = new StringHelper();
// or
StringHelper::someStaticFunction();
真正让人兴奋的是名称空间和autoloader的结合。看看这里=>

关于

但这让我想到了编译和运行时

我认为@Mark最贴切:

大多数基于类的系统使用自动加载器,它只包括处理请求所需的类/文件

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

如果我使用这个类,例如,我只调用一个方法,那么整个类在执行之前不是都要被解析和转换并分配内存吗


冗长的类有时可以分解成更小的类,这限制了执行单个方法所加载的代码量。我认为这里的关键是,归纳类需要最少的资源来操作调用它们的函数。

您似乎假设包含函数的文件不需要解析和“转换”或内存分配不,我不是,但是,解析和转换一个函数肯定比解析整个类更有效?文件被解析/等等,不管它们包含类还是函数。。。。假设您有一个包含20个函数的文件,但只调用其中一个函数。。。。PHP仍然解析整个文件,而不仅仅是它预测/猜测您在包含文件时将调用的函数解析/词法分析包含类的文件与解析/词法分析包含过程函数的文件相比,开销不会更多,也不会更少。。。。。如果您使用的是OpCache,那么只会发生一次,然后编译的字节码就会被缓存。。。。无论是类还是过程函数,如果您将包含20个函数的文件拆分为每个函数的单独文件,并且只包含您需要的文件,那么您的“非常慢”的磁盘访问就会显著增加。。。。与lexing/parsing相比,磁盘/文件访问速度较慢您的
Helper
类与具有函数的文件完全相同。@PeeHaa,是的,没错,但我建议将此示例
Helper
类拆分为不同的文件,如果可以使用自动加载器,因此,对于某些函数,您不包括2000行,例如,仅包括200行。