Home Articles

Laravel 5 Class扩展

Asked
Viewed 782 times
-1

我是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 Answers

  • 0

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

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

    class A {}
    
    class B extends A {}
    

    只要类 A 存在且可用,则类 B 可以从它扩展 .

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

    有很多方法可以做到这一点 . 定义类 B 时,可以requireinclude class A . 这看起来像是这样的:

    a.php只会

    class A {}
    

    b.php

    require "a.php";
    
    class B extends A {}
    

    现在有很多像Laravel框架或任何有 Value 的图书馆的文件,你_1836768没什么好玩的 . 因此,PHP提供了一种自动加载类的方法,而不是这样做 . 也就是说,如果您以可预测的方式定义类,PHP可以找出您正在讨论的类,而无需使用 requireinclude 语句 .

    还有很多方法可以自动加载php文件 . 在Laravel(以及许多其他项目)中,使用了composer autoloader .

    这意味着必须以预定义的方式放置文件,以便作曲家自动加载器找到它们 . 通过阅读有关作曲家自动加载器然后深入研究代码以了解Laravel的类是如何自动加载的,您将能够弄清楚这是如何发生的 .

  • 0

    尽管彼得的答案错综复杂,但我认为我会写一些更具体的内容:没关系 .

    如果你检查composer.json,你会发现我们正在自动加载 app 目录中的所有内容 . 因此,选择真的是你的 . 重要的是你保持一个合理和可读的结构 . 例如,您可以将它放在 app/Lib 中,并将所有类命名为 App\Lib (如果 App 当然是您的基本命名空间,可以使用 php artisan app:name 进行更改) . 当然,您也可以为扩展类创建一个像 Helpers/Lib 这样的文件夹,并在 Helpers 中保留一些带有全局帮助函数的 helpers.php 形式 .

    你为什么要这样做?好吧,您可能希望有一种简单的方法来调用新的 Str 函数,因此无需在任何地方执行 Str::yourNewMethod($argument) ,您可以添加辅助函数 yourMethod($argument) 以更轻松地调用函数(如果您打算广泛使用它) .

    但是,正如彼得所提到的,你要记住的一件事是,你所扩展的课程不会自动找到 . 然而,它将被自动加载 . 因此,要引用它,您必须记住命名它,例如在下面的示例中 .

    <?php namespace App\Helpers\Lib
    
    Class Str extends \Illuminate\Support\Str {}
    

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

Related