我是L5的初学者 . 我阅读了有关扩展类的文档,但是 **i didn't find any information about where to put the file in which i extend the class. I have to extend Str.php class . 我已经读过,在L4中必须将该文件放在App /文件夹下,但是 i didn't find that folder in L5 . 那么请你告诉我我该怎么做?这是我现在拥有的信息:
-
首先,您必须找到类文件的位置 . 我们将扩展Str类,它位于vendor / laravel / framework / src / Illuminate / Support下 . 请注意,您还可以在app / config / app.php中的别名键下找到此类 .
-
现在在app /文件夹下创建一个名为lib的新文件夹 . 此文件夹将保留我们的类扩展 . 因为Str类在文件夹Support下分组,所以建议您在lib下创建一个名为Support的新文件夹 .
-
现在在app / lib / Support下创建一个名为Str.php的新文件,您刚刚创建了该文件:
但这是针对L4的
2 回答
这更像是一个普通的PHP问题,有两个部分:1)如何扩展类和2)放置文件的位置 .
1)扩展课程不是Laravel或其他任何人提供的 . 那就是语言:
只要类
A
存在且可用,则类B
可以从它扩展 .2)文件在哪里也很重要 . 如果你要定义类
B
并想扩展类A
,那么php运行时需要知道在哪里找到A
. 通常类A
未在类B
的同一文件中定义 .有很多方法可以做到这一点 . 定义类
B
时,可以require或include classA
. 这看起来像是这样的:a.php只会
b.php
现在有很多像Laravel框架或任何有 Value 的图书馆的文件,你_1836768没什么好玩的 . 因此,PHP提供了一种自动加载类的方法,而不是这样做 . 也就是说,如果您以可预测的方式定义类,PHP可以找出您正在讨论的类,而无需使用
require
或include
语句 .还有很多方法可以自动加载php文件 . 在Laravel(以及许多其他项目)中,使用了composer autoloader .
这意味着必须以预定义的方式放置文件,以便作曲家自动加载器找到它们 . 通过阅读有关作曲家自动加载器然后深入研究代码以了解Laravel的类是如何自动加载的,您将能够弄清楚这是如何发生的 .
尽管彼得的答案错综复杂,但我认为我会写一些更具体的内容:没关系 .
如果你检查composer.json,你会发现我们正在自动加载
app
目录中的所有内容 . 因此,选择真的是你的 . 重要的是你保持一个合理和可读的结构 . 例如,您可以将它放在app/Lib
中,并将所有类命名为App\Lib
(如果App
当然是您的基本命名空间,可以使用php artisan app:name
进行更改) . 当然,您也可以为扩展类创建一个像Helpers/Lib
这样的文件夹,并在Helpers
中保留一些带有全局帮助函数的helpers.php
形式 .你为什么要这样做?好吧,您可能希望有一种简单的方法来调用新的
Str
函数,因此无需在任何地方执行Str::yourNewMethod($argument)
,您可以添加辅助函数yourMethod($argument)
以更轻松地调用函数(如果您打算广泛使用它) .但是,正如彼得所提到的,你要记住的一件事是,你所扩展的课程不会自动找到 . 然而,它将被自动加载 . 因此,要引用它,您必须记住命名它,例如在下面的示例中 .
还要记住在调用自己的类时正确命名空间 .