Laravel 5 Class扩展

时间:2015-06-17 21:52:16

标签: php laravel

我是L5的初学者。我阅读了有关扩展类的文档,但是我没有找到任何关于在哪里放置文件扩展类的信息。 **我必须扩展Str.php类。我已经读过在L4中必须将该文件放在App /文件夹下但我没有在L5中找到该文件夹​​。 那么请你告诉我我该怎么做? 这是我现在的信息:

  1. 首先,您必须找到类文件的位置。我们将扩展Str类,它位于vendor / laravel / framework / src / Illuminate / Support下。请注意,您还可以在app / config / app.php。
  2. 中的别名键下找到此类
  3. 现在在app /文件夹下创建一个名为lib的新文件夹。此文件夹将保留我们的类扩展。由于Str类分组在Support文件夹下,因此建议您在lib下创建一个名为Support的新文件夹。
  4. 现在在app / lib / Support下创建一个名为Str.php的新文件,您刚刚创建了该文件:
  5. 但这是针对L4

2 个答案:

答案 0 :(得分:0)

这更像是一个普通的PHP问题,它有两个部分:1)如何扩展类和2)放置文件的位置。

1)扩展课程不是Laravel或其他任何人提供的。那就是语言:

class A {}

class B extends A {}

只要班级A存在且可用,则班级B可以从中扩展。

2)这里的文件也很重要。如果你要定义类B并想要扩展类A,那么php运行时需要知道在哪里找A。通常,类A未与类B在同一文件中定义。

有很多方法可以做到这一点。定义类A时,您可以requireincludeB。这看起来像是:

a.php只会

class A {}

b.php

require "a.php";

class B extends A {}

现在有很多文件,比如Laravel框架或任何有价值的库,你将要包含很多文件,并且必须跟踪如何包含这些文件。这没什么好玩的。因此,PHP提供了一种自动加载类的方法,而不是这样做。也就是说,如果您以可预测的方式定义类,PHP可以在不必使用requireinclude语句的情况下找出您正在讨论的类。

还有很多方法可以自动加载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 {}

还要记住在调用自己的类时正确命名空间。