Home > Article > Backend Development > 我在思考一下底层问题
经常看到别人说啥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();