目前,我通过在网站的每个页面上包括一个" all.inc.php"文件加载我的所有类整个网站. 我的问题是,我经常使用仅与网站的某些页面/部分有关的课程,因此我经常在页面开头中包括一堆课程. 显然,自动加载类可以解决此问题,所以我的问题是,当服务器必须检查文件是否存在时,可以自动加载这些类的性能下跌?而且,如果有缺点,那么这比必须在页面上不使用许多类别的类别更糟?还是差异是否定的? 解决方案 本文具有一些信息和基准: php自动加载性能(存档).结论: 自动加载不会显着降低性能. include_path查找,读取和解析来自磁盘的PHP脚本所需的时间比裸露的自动加载逻辑成本更长. 其他解决方案 自动加载一堂课几乎与以正常方式包括类一样快.切换到自动加载将在您的情况下提高性能,因为PHP加载更少的文件和类. 如果脚本不必每次在文件系统中搜索文件, 其他解决方案 自动加载将提高性能.如果使用命名空间,则可以将命名空间和类名的映射到一个文件夹和文件中,例
以下是关于 class 的编程技术问答
我有一个带有成员变量的课程. 当从静态上下文调用类时,PHP中的PHP语法是什么? 基本上,我想调用类方法(但不是创建一个新对象),但是当调用类方法时,我希望初始化一些静态常数变量,这些变量需要在不同的类方法中共享. ,或者如果有更好的方法可以做到这一点,那么我建议的是与我分享(我是PHP的新手) 谢谢! 例如 class example { var $apple; function example()//constructor { example::apple = "red" //this throws a parse error } } 解决方案 出于简洁的缘故,我只提供PHP 5版本: class Example { // Class Constant const APPLE = 'red'; // Private static member private s
这就是我在foo.php 中所拥有的 class Foo { public $foo = NULL; public $foo2 = NULL; public function setFoo ($foo, $foo2) { $this->foo = $foo; $this->foo2 = $foo2' } } 这就是我在foo3.php 中所拥有的 class Foo3 extends Foo { public $foo3 = NULL; public function setFoo3 ($foo3) { $this->foo = $foo3; } } 这就是我在第三个文件run.php中要求它的方式: require_once "foo.php"; require_once "foo3.php"; $foo = new Foo(); $foo->
我正在使用一些方法来自动使用功能.我现在唯一的问题是如何调用该类中的变量. 因为我没有将其实例化为对象,所以$this无法使用.但是什么? class some_helperclass { var $some_variable = '007'; public static function some_func() { //return 'all ok'; if (self::some_variable !== FALSE) { return self::ip_adres; } } 我可以在spl_autoload_register()的帮助下从任何地方调用该功能. some_helperclass:: some_func(); 解决方案 您必须使用self::$some_variable.将$放在那里. http://www.php.net/manual/manual/en/en/lang
我想知道$this->name和$this->$name有什么区别? $this是否必须严格命名为 this ,还是什么? 解决方案 $this是保留的变量名称,不能用于其他任何名称.它专门将您指向您当前正在工作的对象.您必须使用$this,因为您不知道将分配哪个变量对象. $this->name是指当前类的变量name $this->$name是指$name的值的类变量.因此 $name = "name"; echo $this->$name; // echos the value of $this->name. $name = "test"; echo $this->$name; // echos the value of $this->test 其他解决方案 $这是PHP中使用的保留名称,用于指向您在中使用的类的当前实例(引用): 可以使用伪变量$this 当从内部调用方法时 对象上下文. $this是参考 到调用对象(通常是 该方法所属
我正在尝试从公共静态函数中使用PHP功能(我已经缩短了一点): class MyClass { public static function first_function() { function inside_this() { $some_var = self::second_function(); // doesnt work inside this function } // other code here... } // End first_function protected static function second_function() { // do stuff } // End second_function } // End class PayPalDimesale 那是我收到错误的时候"无法访问self ::当没有类范围处于活动状态时".
我一直在尝试使用OO PHP,目前有三个文件.我有一个class_lib.php,目前,它只有一个数据库服务器类,index.php文件和一个defacitions.php文件.我想将所有敏感数据库信息都放在定义文件中.但是,当我尝试连接到数据库时,我会遇到错误:" UNBOWN SERVER DB_HOST".我的定义文件是: 然后我在索引文件中使用它们: include('definitions.php'); include('class_lib.php'); $testing = new databaseServer(); $testing->connect(DB_HOST,DB_USER,DB_PASS,DB_N
我在PHP中有问题. 在我的PHP文件中,我创建了以下行: $foo = $wke->template->notify() ->type("ERROR") ->errno("0x14") ->msg("You are not logged.") ->page("login.tpl"); 最后,我需要我的$foo变量将返回以下内容: $foo->type = "ERROR" $foo->errno= "0x14" $foo->msg= "You are not logged." $foo->page= "login.tpl" 请注意,$wke->template是我需要调用notify()元素的地方. 解决方案 仅通过" - >"一个一个class One的函数的方式,因为函数返回了类的相同
我需要一个想法来在PHP上创建匿名类.我不知道我如何工作. 请参阅我的限制: 在php上,您不能匿名类,例如匿名函数(例如class {}); 在PHP上,您没有类范围(在名称空间中除外,但下面有同样的问题); 在PHP上,您不能使用变量指定类名称(例如class $name {}); 我无法访问安装runkit pecl. 我需要什么,为什么: 好吧,我需要创建一个称为IE create_class()的函数,该函数接收一个关键名称和A 匿名类.这对我很有用,因为我想使用PHP无法接受的不同名称类符号.例如: 所以,我需要一个接受此用途的想法.我之所以需要它,是因为在我的框架上,我
我可以在类构造函数函数内定义类常数吗? (基于某些条件) 解决方案 违背了类常数的想法 - 它们不应取决于特定实例.您应该使用变量. 但是,如果您坚持这样做,这是非常冒险的并且可以安装PHP扩展名,则可以查看允许在运行时修改类及其常数的Runkit扩展程序.请参阅此文档: http://www.php.net/manual/manual/manual/en/function. runkit-constant-add.php 其他解决方案 我认为您不能. 这也没有意义 - 可以在没有构造函数的静态上下文中使用类常数. 您必须使用变量 - 这就是它们的目的. 其他解决方案 尝试在这里查看: http://php.net/manual/manual/en/langue.oop.oop5.常量.php http://php.net/manual/manual/enual/en/language.oop5. static.php 希
我正在为PHP建立一个单元测试框架,我很好奇是否有一种方法可以获取不包括父级方法的对象方法的列表.因此,给定: class Foo { public function doSomethingFooey() { echo 'HELLO THERE!'; } } class Bar extends Foo { public function goToTheBar() { // DRINK! } } 我想要一个函数,给定参数new Bar()返回: array( 'goToTheBar' ); 没有 需要实例化foo实例. (这意味着get_class_methods无法正常工作). 解决方案 使用 reflectionClass ,例如: $f = new ReflectionClass('Bar'); $methods = array(); foreach ($f->get
在这里考虑此代码: final class TinkerWithMe { protected $key1 = 19; private $key2 = 88; } $class = new TinkerWithMe(); $getKeys = function() { return array($this->key1, $this->key2); }; $oldKeys = $getKeys->call($class); $newKey1 = 96; $newKey2 = 42; $setKeys = function() use ($newKey1, $newKey2) { $this->key1 = $newKey1; $this->key2 = $newKey2; }; $setKeys->call($class); 当您可以轻松地封闭或反思时,为什么要烦恼OOP的可见性? 是否有一种阻止我缺少这种事情的方法?
这是初始化类变量的两种方法. 1st方法 class Test { private $var1; private $var2; public function Test($var1,$var1) { $this->var1 = $var1; $this->var2 = $var2; } } $objTest = new Test("value1","value2"); 第二种方法 class Test { private $var1; private $var2; public function _set($var, $value) { $this->$$var = $value } } $objTest = new Test(); $objTest->_set('var1','value1'); $objTest->_set('var2','valu
我正在尝试在WordPress中创建一个小部件,并且我遇到了一个创建Simplexmlelement对象的问题. 这是代码: namespace GenieKnows_Search; class GenieKnows_Search_Widget extends \WP_Widget { //Constructor function __construct() { parent::__construct('genieknows_search_widget', 'GenieKnows_Search_Widget'); } //Irrelevant Code. Removed for readability. //Return the XML function retrieve_gk_xml() { $xml = new SimpleXMLElement($this->crea
我处于一个情况下,我需要在另一个类的实例中实例化类别的参数. 这是原型: //test.php class test { function __construct($a, $b, $c) { echo $a . '
'; echo $b . '
'; echo $c . '
'; } } 现在,我需要使用以下类的 cls 函数来实例化类: class myclass { function cls($file_name, $args = array()) { include $file_name . ".php"; if (isset($args)) { // this is where the problem might be, i need to pass as many arguments as test class has
人们一直告诉我,我应该在所有课堂属性和方法前使用公共,私人或受保护的访问修饰符.我真的不明白为什么.我是新来的,所以我的看法是: 我是唯一一个将在我的代码上工作的人.不是一个团队. 我已经知道一切的含义,加上使用一个告诉我所有声明的var和属性的编辑器,我知道我不会踩我的二手变量. 我得到的解释之一是,它"保护或隐藏"您的代码免受可以看到的人的代码.....但是在PHP中,我不知道用户在第一个中看到您的代码地点,我将其隐藏在谁?如果他们可以看到我的代码,那么他们要么是黑客,要么在我的帐户中,所以我无论如何都无法阻止它们. 我可以理解我是否在团队中使用庞大的代码,但是对于小事来说,这似乎是不必要的. 解决方案 您不是从任何人那里"隐藏"您的代码,这是胡说八道. protected和private属性正在做什么是告诉PHP 您打算如何使用它们.创建课程时,通常应该了解希望如何使用该类.您将拥有其他代码可以与之交互的public零件,以及您不想直接访问其他
我正在通过访问某人已经实现的类功能来查询字段的ID.结果是带有受保护成员变量的对象.我正在努力查看如何访问班级以外的成员变量值. 解决方案 只需在类中添加一个" get"方法. class Foo { protected $bar = 'Hello World!'; public function getBar() { return $this->bar; } } $baz = new Foo(); echo $baz->getBar(); 其他解决方案 访问公共的受保护或私人变量是不正确的(这就是为什么它们受到保护或私人的原因).更好的是扩展课程和访问所需的属性或制作Getter方法以获取公共场所.但是,如果您仍然想在不扩展的情况下获得属性,并且使用php 5,则可以使用反思课程.实际尝试 reflectionproperty class. class Foo { protected $bar; } $fo
如何为Divi WordPress主题添加自定义模块? http://www.elegantthemes.com/gallery/gallery/divi/ 在 main-modules.php 中创建原始模块 示例: class ET_Builder_Module_Gallery extends ET_Builder_Module { .... } ,但是在我的插件或主题 functions.php 中无法访问ET_Builder_Module类 解决方案 这里大多数其他解决方案都太复杂了.最简单的方法是将自定义模块加载到Divi特定的操作挂钩et_builder_ready中,因此: add_action( 'et_builder_ready', 'evr_initialize_divi_modules' ); function evr_initialize_divi_modules() { if ( ! class_exists( 'ET_Bu
在PHP中,是否对使用其中有很多功能的一个长班级有任何性能影响?还是建议使用许多小型课程并在需要时单独称呼它们? 我是一名新手,请忽略这个问题中的任何愚蠢.谢谢. 解决方案 建议在获得代码之前不要考虑性能.从可维护性和可理解的角度来看,当然,使用较小方法的较小类是优越的. (请参阅单个责任原则) ) 当您需要优化时,您确实可以(自动)将所有代码组装到一个大文件中,并节省一些时间. 其他解决方案 首先,考虑干净的OOP设计. 非常长的类和属性的非常长的课程很难理解. 一组精心设计的类,具有有意义的类名称,方法名称和可变名称非常容易理解,尤其是在维护期间. 其他解决方案 通常,人们倾向于做太大和复杂的课程 - 这是因为通常很难看到凝聚力边界所在的位置.因此,当您刚开始时不确定时,最好在使它们太小的一边犯错:您总是可以将较小的班级合并为较大的班级...通常很难将大型班级重构成几个小型班级
我有2堂课: class animal{ public function walk(){ walk; } } class human extends animal{ public function walk(){ with2legs; } } 这样,如果我称为human-> walk(),它只会与2 legs一起运行; ,但我想跑步父母的步行; 也 我知道我可以这样修改: class human extends animal{ public function walk(){ parent::walk(); with2legs; } } 但是问题是,我有很多子类,我不想放父:: walk();进入每个孩子走路().有什么方法可以扩展像我扩展课程的方法吗?没有覆盖,但确实扩展了该方法.还是有更好的选择? 谢谢. 解决方案 我将使用"ho