这是我的班级图
类的实现如下所示
人类
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模式框架中的控制器是从基本控制器扩展的,因此在那些框架中不能为每个类创建控制器并从父类继承它?这是我遇到的问题
答案 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自动加载核心文件夹中的文件。