当前位置:Gxlcms > PHP教程 > 我在思考一下底层问题

我在思考一下底层问题

时间:2021-07-01 10:21:17 帮助过:17人阅读

经常看到别人说啥mvc,当然他们怎么说,我怎么信,那时也没有考虑为什么。今天突然想,写进浏览器地址栏中的url地址后,为啥浏览器就这么乖乖的找到要的数据呢。

做为静态页而好理解,比如html的页面,,浏览器直接奔向了这个而打开就是了。

可是做为动态的页面就不是这么玩了,这正是我思考的,因为动态页面中有的是得到mvc模式中的方法,这就另人不解为啥能获得了?

所以我开始推理了,也不知对不对:

先说说地址栏中的表单传值这个好理解,比如

$myVar = $_GET['myvar'];
$twoVar = $_GET['twovar'];
echo $myVar;
echo $twoVar;

http://127.0.0.1/shop/index.php?myvar=1111111111111111111111111&twovar=88888888888

结果页面中打印出11111111111111188888888888.因为服务器获取了全局变量的值。

可是用这种方法推理到mvc模式就让人大头了,因为mvc中的控制器不是值 了 ,而是方法了,这又是怎么玩的呢


回复讨论(解决方案)

一个例子

class test{	public function t1(){		return 'function t1';	}	}$controller = 'test';//控制器,$_GET 获取$action = 't1';//方法,$_GET 获取$class = new test();$ref1 = new ReflectionMethod($class,$action);echo $ref1->invoke($class);

不用反射,php 原生代码更直观

class test{    public function t1(){        return 'function t1';    }} $controller = 'test';//控制器,$_GET 获取$action = 't1';//方法,$_GET 获取 $class = new $controller;echo $class->$action();

我明白楼上两位的意思了,原来我没有考虑到new这个行为。
那么做为框架,比如thinkphp,地址栏通过获取全局变量的函数很容易找到所要的类,进而进入这个类,那么 问题来了,这个new是怎么做的呢,因为没有new就不可能调用类里的方法,还请二位指点一下

你知道了类名,就 new 类名 不就行了?
只不过类名是在变量中的,那也只要 new $保存有类名的变量

MVC 并不一定要面向对象

$controller = 'test';//控制器,$_GET 获取$action = 't1';//方法,$_GET 获取include $controller . '.php';echo $action();
一样是可以的

框架有个index.php的,就是在那里处理new哪个类的

$controller = 'test';
$action = 'a1';
include $controller.'.php';
echo $action();

人气教程排行