class home{
function index(){
打开主页
}
}
想写一个mvc模式的原生php网站,像跟一些框架一样,通过get的方式index.php?c=home&f=index,让名为home的类控制器自动创建对象,自动调用函数index函数。其他页也可以通过创建类控制器类实现。
关于php面向对象的问题,求对框架原理了解的大神。
答案:3 悬赏:60 手机版
解决时间 2021-02-11 00:02
- 提问者网友:我的未来我做主
- 2021-02-10 03:04
最佳答案
- 五星知识达人网友:冷風如刀
- 2021-02-10 03:46
自己设计框架学习意义远大于实用意义,设计的过程中可能会浪费你不少时间,而且你可能以后永远不会(99%)用到自己设计的框架,但是对你深入了解PHP还是很有帮助的。
(我自己也有在设计一个框架,如有兴趣,可以发给你一起研究)
大部分PHP MVC框架中心思想都是一样的:
首先要单文件入口(index.php),就是所有的访问都通过一个文件来控制,这样就能控制流程了。要实现这个功能就需要apache或者nginx的设置来配合了。以apache为例,最经典的.htacess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=$1 [QSA,L]
此文件的作用就是如果如果访问的文件或者文件夹存在的话就直接调用文件(用来处理访问/public/css, /public/js之类的请求),不然的话就将请求转发给index.php。此时index.php可以调用$_GET['_url'] 来获得请求。
#一般框架遵循的规则是:[地址]/[控制器名字]/[方法名字]/[参数/参数]
#请求: localhost/test/helloworld/china/shanghai
#在index.php里就可以访问$_GET['_url']来获得字符串:/test/helloworld/china/shanghai然后将字符串explode()成array,根据默认规则获得以下信息(如果愿意可以自己写一个路由而不用默认方法解析路径)
控制器:test
方法:helloworld
参数:china, shanghai
先在test.php中:
class test
{
public function helloworld($country, $city)
{
echo 'Hello, I am from', $country, $city;
}
}
然后在index.php中:
#这里可以自己定义一个__autoload方法来让PHP自行require_once() class文件,就不用自己一个一个include()了。
#初始化一个控制器实例:
$test = new test();
#调用控制器中的方法,并递交参数
#请查阅PHP函数call_user_func_array()的使用方法
call_user_func_array( array($test, 'helloworld'), array('china','shanghai') );这样就完成了一个简单的MVC框架,剩下的就是继续完善他,你可能需要学习以下知识:
1. PHP __autoload()的设计和命名空间(namespace)的设计
2. 各种软件设计模式:singleton, dependency injection, lazy loading
3. OOP(面向对象编程)PHP类的继承模式(extends class), PHP接口(implements interface)
4. PHP数据库操作类: mysqli类, pdo类
5. HTTP请求,header中的各种参数设置
6. Web Programming的安全事项, 如xss防护
7. 《代码简洁之道》,《PHP Zend Coding Style》
希望能帮助到你!
(我自己也有在设计一个框架,如有兴趣,可以发给你一起研究)
大部分PHP MVC框架中心思想都是一样的:
首先要单文件入口(index.php),就是所有的访问都通过一个文件来控制,这样就能控制流程了。要实现这个功能就需要apache或者nginx的设置来配合了。以apache为例,最经典的.htacess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=$1 [QSA,L]
#一般框架遵循的规则是:[地址]/[控制器名字]/[方法名字]/[参数/参数]
#请求: localhost/test/helloworld/china/shanghai
#在index.php里就可以访问$_GET['_url']来获得字符串:/test/helloworld/china/shanghai然后将字符串explode()成array,根据默认规则获得以下信息(如果愿意可以自己写一个路由而不用默认方法解析路径)
控制器:test
方法:helloworld
参数:china, shanghai
先在test.php中:
class test
{
public function helloworld($country, $city)
{
echo 'Hello, I am from', $country, $city;
}
}
然后在index.php中:
#这里可以自己定义一个__autoload方法来让PHP自行require_once() class文件,就不用自己一个一个include()了。
#初始化一个控制器实例:
$test = new test();
#调用控制器中的方法,并递交参数
#请查阅PHP函数call_user_func_array()的使用方法
call_user_func_array( array($test, 'helloworld'), array('china','shanghai') );这样就完成了一个简单的MVC框架,剩下的就是继续完善他,你可能需要学习以下知识:
1. PHP __autoload()的设计和命名空间(namespace)的设计
2. 各种软件设计模式:singleton, dependency injection, lazy loading
3. OOP(面向对象编程)PHP类的继承模式(extends class), PHP接口(implements interface)
4. PHP数据库操作类: mysqli类, pdo类
5. HTTP请求,header中的各种参数设置
6. Web Programming的安全事项, 如xss防护
7. 《代码简洁之道》,《PHP Zend Coding Style》
希望能帮助到你!
全部回答
- 1楼网友:鸽屿
- 2021-02-10 05:44
简单点说,就是根据你get来的参数去包含文件就好了,我就自己做的
- 2楼网友:轻熟杀无赦
- 2021-02-10 05:03
这个不难,但在这里一两句还真说不清楚!
但关键上, “简单点说,就是根据你get来的参数去包含文件就好了,我就自己做的"
这个朋友回答的还真没错!
不是人家没看清楚你的问题, 而是你没理解到而已!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯