问题标签 [psr-0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 通过 composer 自动加载多个 PHP 项目
假设我的文件夹布局为
这些项目需要处于同一级别,并且需要彼此共存,例如projectA
可能使用来自projectB
and的代码projectC
,反之亦然,因此不能将它们放入vendor
文件夹中。
问题是:autoload.php
在每个项目中都能够自动加载自己的src
文件vendor
夹,但是如何为其他项目自动加载呢?
假设他们邻居的项目将文件夹名称作为 PHP 命名空间,是否可以设置一个 autoload.php(通过作曲家),以便将来当我添加新项目文件夹时,自动加载会神奇地工作?
php - 我应该总是在 PHP 中使用完全限定的类名吗?
我看到一些示例代码,例如
为什么不总是使用完全限定的类名呢?
所以你不必担心这个文件是否在任何命名空间中使用,对吧?
php - 同时使用 Composer 自动加载两个供应商项目
我有两个项目(project1,project2)正确设置了composer,有自己的composer.json
现在,在另一个 php 文件中,我通过
我得到了错误
是 wp-cli 的问题还是 composer 的问题?我已经尝试过使用另一个库,例如 monolog,这很好。
任何想法?
refactoring - phpstorm 移动类而不打开文件
是否可以在 phpstorm 中移动类而无需打开类文件,选择类名并按 F6 ???
我已经定义了 PSR0 源根,但它似乎与问题有关
使用 intellij idea,您可以抓取类并将其放入您想要的任何包中,它会更新命名空间
谢谢
composer-php - 在 composer.json 中使用 PSR-0 不会加载我的类
在composer.json
我有以下数据:
lib
文件夹位于文件夹旁边vendor
。在 lib 我有一个名为的类Decorator.php
,我的类名Decorator
如下:
我跑去php compooser.phar update
得到消息Nothing to install or update blah blah blah
。
为了更好地理解,这是项目文件夹结构的一部分:
现在,当我想实例化我的课程时,我无法访问我的课程。
php - 如何使用 NetBeans IDE 组织 PHPUnit 测试和自动加载
有自动加载规则(http://www.php-fig.org/psr/psr-0/)和 PHPunit 测试(https://phpunit.de/manual/current/en/organizing-tests.html)。分开它们很容易实现,但组合起来却不是。
我还阅读了一个 PHPUnit 最佳实践来组织测试的主题,但应用答案对我来说并不明显。编写我自己的项目时,我遇到了几个问题,这些问题可能与代码组织的起源相同。我希望我能有一个真正简单的例子的食谱。因此,我提出了很大的问题。
示例项目
我使用NetBeans IDE 7.4因为它支持 PHPUnit、SVN 和 Doxygen(但我缺乏使用该 IDE 的经验)。
项目属性是
- 项目文件夹:C:\xampp\htdocs\myapps\PhpProject1
- 源文件夹:C:\xampp\htdocs\myapps\PhpProject1
- 测试文件夹:C:\xampp\htdocs\myapps\PhpProject1\tests
有第一个问题。NetBeans 从一开始就阻止了镜像 src/tests 结构。Source Folder没有Browse按钮。Test 文件夹必须不同于Source 文件夹。
我使用位于项目外部的 PHAR 文件中的 PHPUnit 和 skelgen。(工具->选项->PHP/PHPUnit)
- PHPUnit 脚本:C:\xampp\phar\phpunit.phar
- 骨架生成器脚本:C:\xampp\phar\phpunit-skelgen-1.2.1.phar
我在项目目录中有以下文件结构
wheresrc
不是命名空间,因为
- 文件
src/MyPack/Foo/Bar.php
包含类MyPack\Foo\Bar
- 文件
src/MyPack/Quu/Baz.php
包含类MyPack\Qoo\Baz
- 文件
src/Client.php
包含类Client
srcAutoload.php
包含来自https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md的修改后的 PSR-0 自动加载实现。不同之处在于在执行require()
PSR-0 文件名之前以src/
测试生成和自动加载问题
我为和类使用了工具/创建测试(从上下文菜单中),最终得到以下结构Bar
Baz
这绝对不是镜像对称的。此外,生成的测试不知道如何加载他们正在测试的类。
我的自动加载解决方法
如前所述,测试运行器的工作目录与项目不同。所以用于测试的自动加载器应该创建不同的完整文件名。我复制了 PSR-0 自动加载器,将其另存为tests/srcAutoloadFromTests.php
并添加了另一个前缀
之后,我添加了Use Bootstrap (Project Properties->Testing/PHPUnit )。文件tests/bootstrap.php
包含:
这个解决方案使 PHPUnit 执行测试,但对我来说看起来很丑。
更具体的问题
为什么镜像src/
对tests/
自动加载没有帮助?
我通过创建正确的文件夹和移动文件手动创建了镜像结构:
根据https://phpunit.de/manual/current/en/organizing-tests.html PHPUnit可以通过递归遍历测试目录自动发现和运行测试。它对我不起作用。如果没有我srcAutoloadFromTests.php
,我会得到与以前的非镜像结构相同的错误。
自动加载代码重复怎么办
因为 NetBeans 不允许将源文件夹用作测试文件夹,所以我必须为同一个类设置两个自动加载器。我不确定这是否是一个好习惯。
自动加载不应该打扰其他从事同一项目的程序员。我寻找更通用的东西。
此外,将来我可以使用第三方代码。他们的自动装载机也需要复制吗?
src/
和文件夹是否应该tests/
是顶级的vendor/
我前段时间一直在学习自动加载规则。现在我发现 PSR-0 根据 PSR-4 被标记为已弃用src/
,tests/
应该放在路径中间的某个地方。
但是有一种做法是将第三方代码放在顶级vendor/
文件夹中。src/
和文件夹不tests/
应该放在同一级别。
这使得整个结构更具PSR-0风格。
NetBeans 中没有提示 PHPUnit
在编写 BazTest 和 BarTest 代码时,NetBeans IDE 不会提示 PHPUnit 方法,尽管这两个类都扩展\PHPUnit_Framework_TestCase
是因为我使用 PHAR 的 PHPUnit 吗?
我希望引用这个例子能让我的问题更清楚。感谢您的阅读,我寻求好的建议
php - 找不到类问题(作曲家,PHPUnit)
从 PHPUnit 获取以下错误:
我的结构是这样的:
通过作曲家完成自动加载:
尝试使用 PSR0、PSR2、PSR4、...
MoneyTest 类:
金钱类:
为什么它试图加载 FoobarTest\Money\Money
而不是Foobar\Money\Money
?
php - 如何使用 Composer 从本地存储库加载 php 类?
我是 Php 和 Composer 的新手,我想使用 Composer 将 Php 类访问到另一个模块,这是我的基本项目结构(两个模块 common 和 worker)index.php
常见/供应商/画布/test.php
普通/作曲家.json
工人/作曲家.json
工人/tempcaller.php
我也无法使用 psr-0 或存储库来做到这一点,有什么方法可以做到这一点吗?
php - 带有类、命名空间和 psr-0 自动加载的 Wordpress 插件
我对这个 Wordpress 很陌生,现在我已经制作了自己的主题,并想创建一个插件来处理我的幻灯片。
(稍后我必须为一些学生教这个,所以我不能只使用现有的插件)
我已经从底部的http://www.php-fig.org/psr/psr-0实现了自动加载器,它工作正常。
我可以调用我班级中的所有方法和所有内容,这很好。这是实际的问题:
当。。。的时候
被调用,然后它运行该方法
但 dbDelta() 是一个未定义的函数。我可以看到它试图在函数前面设置命名空间(我不知道为什么,因为它不是类方法,而是一个函数,对吧?)。无论如何,我试过这样称呼它
这似乎有效,但它仍然找不到该功能。我可以在课堂上手动要求 dbDelta 还是有其他问题?
对不起,很长的问题......
乌尔里克·麦卡德尔