欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

我在思考一下底层问题

程序员文章站 2023-12-25 23:03:21
...
经常看到别人说啥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();

上一篇:

下一篇: