在laravel中实现面向对象的设计

时间:2016-03-03 12:34:58

标签: php laravel

这是我的班级图

class diagram

类的实现如下所示

人类

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中实现这些类

像laravel,codeigniter这样的mvc模式框架中的控制器是从基本控制器扩展的,因此在那些框架中不能为每个类创建控制器并从父类继承它?

这是我遇到的问题

4 个答案:

答案 0 :(得分:2)

你似乎对此感到困惑,可能想要研究如何使用MVC架构编写应用程序。

现在回答,您还没有提到是否要将这些类持久化到数据库。如果您不想将它们保存到数据库,请参阅上面的答案。定义您想要的类,并像使用任何其他语言一样使用它们。

另一方面,您可能希望将这些类持久化到数据库,然后您希望将这些类定义为模型。创建一个Person base Model并从那里扩展其他人。

您不需要为每个控制器创建单独的控制器,只需创建所需的控制器即可。您可以使用一个或多个控制器中的一个或所有上述模型。

答案 1 :(得分:1)

这取决于你想要的方式。

你可以简单地用常用的东西定义一个特征,并像使用一个类一样使用它。

如果它变得复杂,你还必须处理名字间距。

http://php.net/manual/en/language.oop5.traits.php

trait PersonTrait {
    public $name ='Mr. Awesome';

    public function speak(){

    }
}

class Student {
    use PersonTrait;

    public function learn(){

    }
}

class Professor {
    use PersonTrait;

    public function teach(){

    }         
}

答案 2 :(得分:0)

这个想法是当开发人员进入框架时,他/她根据框架视角开始编码,并思考如何实现OOD方法?

嗯,问题是你仍然可以实现你想要实现的目标。在./node_modules/grunt-contrib-jshint/node_modules/jshint/bin/jshint --verbose app/sources/modules/dashboard/views/dashboard-performance/dashboard-performance-ctrl.js 目录中,您可以创建一个目录,将其命名为" classes" (或任何你喜欢的)。首先像往常一样创建类(添加适当的命名空间,就像在这种情况下app),一切都应该没问题。

确保将目录添加到app\Classes

中的autoload
composer.json

因为它是一个PHP类,所以也加上

"autoload": {
    "files": [
        "App/Classes/className.php"
    ]
}

然后运行"autoload": { "psr-4": { "MyApp\\": "app/" }, }, 。现在,您可以像往常一样在控制器中使用自定义类(不要忘记composer dump-autoload)。应该这样做。

答案 3 :(得分:0)

您可以通过在personigniter的核心文件夹中创建person类并使用CI_Controller扩展它,然后使用任何类扩展person类来实现此目的。

这是你的人类的样子:

class Person扩展CI_Controller {

function __construct()
{
    parent::__construct();
}
public $name='person'

public function speak()
{
    echo 'person speek'
} 

}

现在将文件保存到codeigniter核心文件夹中。您还需要在cofig文件中指定sub_class前缀。 Codeigniter自动加载核心文件夹中的文件。