Php 在laravel中实现面向对象设计
这是我的类图 这些类的实现如下所示 人类Php 在laravel中实现面向对象设计,php,laravel,Php,Laravel,这是我的类图 这些类的实现如下所示 人类 class Person { public $name='person' public function speak() { echo 'person speek' } } 学生班 class Student Extends Person { public $studentNumber; public function learn() { echo 'lea
class Person
{
public $name='person'
public function speak()
{
echo 'person speek'
}
}
学生班
class Student Extends Person
{
public $studentNumber;
public function learn()
{
echo 'learn';
}
}
教授班
class Professor Extends Person
{
public $salary;
public function teach()
{
echo 'teach';
}
}
我想在laravel中实现这些类
mvc模式框架(如laravel、codeigniter)中的控制器是从基本控制器扩展而来的,因此在这些框架中不能为每个类创建控制器并从父类继承控制器
这是我面临的问题。我的想法是,当一个开发人员来到一个框架时,他/她开始根据框架的观点进行编码,并思考如何实现OOD方法 好吧,问题是你仍然可以实现你想要实现的目标。在你的
应用程序
目录中,你可以创建一个目录,称之为“类”(或任何你喜欢的)。像往常一样开始创建类(添加适当的名称空间,如本例中的app\classes
),一切都应该正常
确保将目录添加到composer.json
"autoload": {
"files": [
"App/Classes/className.php"
]
}
因为它是一个PHP类,所以也要添加它
"autoload": {
"psr-4": {
"MyApp\\": "app/"
},
},
然后运行
composer dump autoload
。现在,您可以像往常一样在控制器中使用自定义类(不要忘记使用App\Classes\className;
)。这应该可以做到。您似乎有点困惑,可能不想研究应用程序是如何用MVC架构编码的
现在回答这个问题,您并没有提到是否要将这些类持久化到数据库。如果您不想将它们保存到数据库中,请参见上面的答案。在需要的地方定义类,并像在任何其他语言中一样使用它们
另一方面,您可能希望将这些类持久化到数据库中,然后将这些类定义为模型。创建一个基于人员的模型,并从中扩展其他模型
您不需要为每个控制器创建单独的控制器,只需创建所需的控制器即可。您可以从一个或多个控制器使用上述一个或所有模型 您可以通过在codeigniter的核心文件夹中创建person类并使用CI_控制器扩展它,然后使用任何类扩展person类来实现这一点 以下是person类的外观: 类人扩展CI_控制器 { }
现在将文件保存到codeigniter核心文件夹中。您还需要在cofig文件中指定sub_类前缀。Codeigniter自动加载核心文件夹中的文件。这取决于您希望如何执行 您可以简单地用普通的东西定义一个特性,并像处理类一样使用它 此外,如果名称间距变得复杂,您还必须处理它
这些是Laravel中的模型,而不是控制器。听起来你对MVC架构的本质有点困惑。虽然不是针对Laravel,但可能有助于解释它。@Matei Mihai Laravel 5没有模型文件夹,因此我们可以将模型放在任何地方。我通常在应用程序目录中的文件夹中组织模型。基本上,正如Matei所建议的,这些是Laravel中的模型,因此您可以在Laravel中创建模型,就像您发布的问题一样。创建模型后,您可以为每个模型使用单独的控制器,例如PersonController。控制器、profesorcontroller等。
function __construct()
{
parent::__construct();
}
public $name='person'
public function speak()
{
echo 'person speek'
}
trait PersonTrait {
public $name ='Mr. Awesome';
public function speak(){
}
}
class Student {
use PersonTrait;
public function learn(){
}
}
class Professor {
use PersonTrait;
public function teach(){
}
}