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(){

    }         
}