我是L5的初学者。我阅读了有关扩展类的文档,但是我没有找到任何关于在哪里放置文件扩展类的信息。 **我必须扩展Str.php类。我已经读过在L4中必须将该文件放在App /文件夹下但我没有在L5中找到该文件夹。 那么请你告诉我我该怎么做? 这是我现在的信息:
但这是针对L4
答案 0 :(得分:0)
这更像是一个普通的PHP问题,它有两个部分:1)如何扩展类和2)放置文件的位置。
1)扩展课程不是Laravel或其他任何人提供的。那就是语言:
class A {}
class B extends A {}
只要班级A
存在且可用,则班级B
可以从中扩展。
2)这里的文件也很重要。如果你要定义类B
并想要扩展类A
,那么php运行时需要知道在哪里找A
。通常,类A
未与类B
在同一文件中定义。
有很多方法可以做到这一点。定义类A
时,您可以require
或include
类B
。这看起来像是:
a.php只会
class A {}
b.php
require "a.php";
class B extends A {}
现在有很多文件,比如Laravel框架或任何有价值的库,你将要包含很多文件,并且必须跟踪如何包含这些文件。这没什么好玩的。因此,PHP提供了一种自动加载类的方法,而不是这样做。也就是说,如果您以可预测的方式定义类,PHP可以在不必使用require
或include
语句的情况下找出您正在讨论的类。
还有很多方法可以自动加载php文件。在Laravel(以及许多其他项目)中,使用了composer autoloader。
这意味着必须以预定义的方式放置文件,以便作曲家自动加载器能够找到它们。通过阅读有关作曲家自动加载器然后深入研究代码以了解Laravel的类是如何自动加载的,您将能够弄清楚这是如何发生的。
答案 1 :(得分:0)
尽管彼得的答案错综复杂,但我认为我会写一些更具体的内容:没关系。
如果你检查composer.json,你会发现我们正在自动加载app
目录中的所有内容。因此,选择真的是你的。重要的是你保持一个合理和可读的结构。例如,您可以将其放在app/Lib
中,并命名所有类App\Lib
(如果App
当然是您的基本命名空间,可以使用php artisan app:name
更改)。当然,您也可以为扩展类设置Helpers/Lib
这样的文件夹,并在helpers.php
中保留某种形式的Helpers
全局帮助函数。
你为什么要这样做?好吧,您可能希望有一种简单的方法来调用新的Str
函数,因此无需在任何地方执行Str::yourNewMethod($argument)
,您可以添加辅助函数yourMethod($argument)
以更轻松地调用函数(如果你打算广泛使用它)。
正如彼得所提到的,你要记住的一件事是,你所扩展的课程不会自动找到。然而,它将被自动加载。因此,要引用它,您必须记住命名它,例如在下面的示例中。
<?php namespace App\Helpers\Lib
Class Str extends \Illuminate\Support\Str {}
还要记住在调用自己的类时正确命名空间。