我在试验spl_autoload、namespace和动态类名时遇到了一件“奇怪”的事情。我使用PHP5.3.2,像这样调用自动加载set_include_path(get_include_path().PATH_SEPARATOR."classes".PATH_SEPARATOR."utils");spl_autoload_extensions(".class.php");spl_autoload_register();现在进入核心。建议使用以下代码:new\User\Student;$name="\User\Student";new$name();这工作正常,文件classes/u
我的php代码开头的自动加载器function__autoload($class_name){include_once$class_name.'.class.php';}导致调用newMongoClient();失败并出现错误Warning:include_once(MongoClient.class.php):failedtoopenstream如何为我的类使用自动加载器并仍然使用标准类?注意:MongoDb已与PECL一起安装,并且可以在删除自动加载功能后正常工作。php5.4.9上的mongo-1.3.0beta2 最佳答案
我有一个“简单框架”,其主要实例是$app。现在,实现自动加载器的最佳方法是什么(不使用Composer)。我需要的是有一个处理所有自动加载的类(支持各种命名空间)。我有一些方法/困境。起初我想我应该创建一个处理所有事情的“静态”类。但后来我想到了一些事情。如果我在实例化$app(包含所有路径)之前使用自动加载器,我需要在$app之外定义路径。而且,如果在自动加载类时发生错误,我将无法正确处理错误(错误处理程序在$app内,并在之后实例化)。然后我想到了依赖注入(inject),使自动加载器成为应用程序内的一个对象。这将解决错误处理问题,并且不需要我对路径进行硬编码或使它们成为全局变量
我们有以下简化的文件夹结构:phpunit.xmlautoloading.phpindex.php/models/useruser.php.../settingspreferences.php.../teststest.php这是相关文件的内容:模型/用户/user.phpnamespacemodels\user;classUser{private$preferences;publicfunction__construct(){$this->preferences=new\models\settings\Preferences();}publicfunctiongetPreferenc
我试图将我的PHP__autoload函数定义为尽可能可靠和灵活。这是我的应用程序结构的分解:/dev(root)/my_app/php/classes-Class1.php-Class2.php-Class3.php/scriptsmyscript.php(thefileIhavetoincludetheclassesin)这很简单。我的问题是:我如何编写我的__autoload函数,以便我可以包含我想要的任何类,而不管调用文件在目录结构中的嵌套深度如何。我知道它与__FILE__、realpath和dirname函数有关,但我不确定适当的组合方式他们实现我所追求的灵active。这
我在PHP中遇到了__autoload函数,想将它用于我的MVC文件夹结构。功能本身很简单,但是如何在某种命名后实现动态文件夹扫描,请看示例:-application--controller--models---entities----house---factories----houseFactory--views-library-public正如您可能认识到它非常接近于基于zend框架或其他框架-正如我来自那些,但是我想开发一个没有框架的网站并且刚开始编写bootsrap文件。也许有人可以帮我自动加载-我认为-高级用法。我的类名会像模型_实体_房子要么模型_工厂_房屋工厂witch可
用Yii安装phpunit时遇到很多问题。我跑:$phpunitunit/dbTest.php但结果是这个错误:PHPWarning:require_once(PHPUnit/Autoload.php):failedtoopenstream:Nosuchfileordirectoryin/opt/yii-1.1.10.r3566/framework/test/CTestCase.phponline12(include_path='.:/usr/bin:/usr/share/php:/usr/bin/pear:/usr/share/php/Zend/:/opt/php5.3.10/lib
我想在我正在开发的wordpress插件中通过spl_autoload_register使用类的动态加载,但问题是它不能干扰此功能的预先存在的实现。在我最初的尝试中://registeranautoloaderfunctionfortemplateclassesspl_autoload_register('template_autoloader');functiontemplate_autoloader($class){includeLG_FE_DIR."/includes/chart_templates/class.{$class}.php";}似乎可以加载我自己的类,但同时会导致其
我不明白spl_autoload_register或autoload是做什么的。为什么我不直接使用include或require?我没有看到明确的答案。 最佳答案 自动加载函数或类的优点是:如果您有很多类,则无需手动包含它们。以ZendFramework为例:您不想手动加载所有这些类。使用自动加载器,只需创建一个新类并开始在所有(启用自动加载器的)文件中使用它。仅加载请求中实际使用的文件,从而可能节省资源。如果您只使用50个文件中的10个,为什么要加载其他40个?它迫使你有一个合理的目录布局(毕竟,你需要一些规则,这样你的自动加载器
我有一个Usereloquent模型,它在其构造函数中接受了UserMailer类的一个实例,但我得到了这个错误Argument1passedtoUser::__construct()mustbeaninstanceofTrainerCompare\Mailers\UserMailer,nonegiven,calledin/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.phponline631anddefined我理解这个错误,但无法弄清楚我做错了什么,但我不太了解命名空间和Compose