我正在处理一个包,其中类('A','B'和'C')扩展了“根”类'Foo'。
class Foo {
public function abc(){
//
}
}
class A extends Foo {
...
$this->abc();
...
}
class B extends Foo {
...
$this->abc();
...
}
class C extends Foo {
...
$this->abc();
...
}
在实现此包的项目中,它需要覆盖类'Foo'中的方法'abc'。
PHP/Laravel的正确方法是什么?
有没有一种方法可以扩展/覆盖一个包类,比如一个视图可以使用vendor文件夹?如果可能的话,这将是一个有趣的选择。
更新
以正确的Angular 看待情况的复杂性。类'A'、'B'和'C'在包中的多个位置被调用。我不能只是在应用程序中扩展类'A',因为我需要重新定义对包中类A的所有调用的命名空间路径。
我正在考虑为包中的“A”、“B”和“C”类创建一个门面。这样我就可以覆盖AppServiceProvider包中的facade路径。但我觉得这种做法有点“肮脏”。因此,有理由寻求更清晰的实施建议。
2条答案
按热度按时间jv2fixgn1#
找到一个解决方法。
扩展
abc
方法的需要是基于应用程序的特定参数在类Foo
(一个Mailable对象)中设置from
属性。我需要为所有发送的邮件设置此属性。因为我在包中使用了一个helper函数
bar
来调用各种类(A,B & C)。解决方法之前的包帮助程序文件中的函数
我创建了一个“钩子”,方法是在函数
bar
中添加对可选函数的调用。如果在集成包的应用程序中声明,它将允许在类Foo
上执行所需的操作。在应用程序帮助程序文件中
希望能帮助到处于类似境地的人。
esyap4oy2#
更新
对于这个特殊的情况下,我需要改变从
name
和email
的所有电子邮件正在发送,有一个更容易的解决方案。感谢Laracast post。我所要做的就是覆盖AppServiceProvider中的配置值。