今天被问到一些PHP的基础问题一下子被问住了。。唉,人老了很多基础都忘了
来源:互联网 发布:coursera python 课程 编辑:程序博客网 时间:2024/04/30 03:36
今天,很不幸的是,和一个同行交流的时候,被他用基础的PHP的问题给问住了,虽然很不甘心,但是又无可奈何,最后我只能说,不好意思。这些你问的东西,我在实际应用中不怎么用到,很多都已经生疏了,真的要问,那我只能重新翻阅资料来做出解答或是使用。
虽然这么说了,但是心里异常的窝火,感觉很难受。回来以后把这些内容都整理一下吧。
第一个是require和include
将PHP代码包含进文件,我一般只能include_once。确保只将文件引入一次,但是我在回答的时候我只是说了require,之后被问及为什么不用require_once,我说只是说法上的不同,我一般都是用_once的。
这里我有没考虑到的几个点。
他说的也有问题,什么叫为什么不用require_once,其实require加载的速度更快,为因用require_once的时候他会做检查的。如果看重效率的话,用require的话会更好些。不过大多数情况下用require_once吧。
而require和include的区别就是函数加载失败后的处理。
require直接异常错误中断了,include是仍然会执行,只是给一个警告提示。
在这里的话我感觉实际操作中并没有太多一定要讲究的地方,四种方式都可以接受,按自己的喜爱和习惯就行了。
所以我用include_once用得多些。至于错误和警告,则交由php的配置去处理了。可能require_once在加载错误后直接中断会更符合开发吧。
加载文件还有一个方法,是在php.ini的配置里定义,有两个参数
auto_prepend_file和auto_append_file
具体的用法就不说了,因为这是要写在配置(.ini)里面的,所以我不会考虑用这种方式,以后代码的维护和部署会相当困难。
之后又问到了关于魔术函数的内容。
一时间我也忘了,只是后来提醒了一下我才想到是PHP5里面内定的凡是函数前面加__的就是魔术函数。
比如__autoload,就是自动加载文件到程序中。然后问我除了这个__autoload以外还有什么别的方法实现自己加载的?
我答不上来,我只是在当时说了,1、我自己控制好,不会让两个同名不同目录的文件出现。2、我会尽量不用这个方法,我也觉得这个方法并不是必须的。
一般__autoload我只会用在MVC中要匹配的M和C的对应关系中,其它的我会考虑手动加载。
比如在control层中我定义了一个叫test.php的文件,然后在Modle层里会有对应的test.class.php文件,那我是用autoload来控制的,而且如果有特别的情况时,我会在autoload通过添加逻辑控制的代码来做一些区别和筛选(当然,这点我当时忘了,没有讲到)
至于还有没有别的方法,我不知道。真不知道,开发中可能会有吧。后来查了一下资料有一个叫spl_autoload_register的方法,我查了一下,这个方法确实对加载文件有很不错的效果,值得一用。不过我目前因为在应用中没有碰到需要用到的地方,或者说有问题的地方我都已经以其它方式处理掉了,所以也没有看过这个东西的用法。
除此之外的魔术函术还有很多。比如说__construct和__destruct
啊……我弱比了,这就是java里面的构造函数吧。不过PHP里也能通过直接命名与类名一样名字的方法来达到效果的。
__destruct是析构,JAVA里没有,C++的东西。
可能太紧张了,一时间我没想到。
还有__call,__get,__set,__toString,__clone,__sleep
这些都是魔术函数,__clone么就是Java里也有的。
啊哈哈……好吧,我承认这些我一直都没怎么用过。__get,__set我都是手动去实现他们的方法的。
所以……果断我没答出来了。-____-
最后又问到一个面向对向的问题,好像说是定义一个类,将这个类传到一个方法里面去,然后在这个方法里改变这个类的变量,之后在外部类里这个变量会不会变。。
当时我前面已经被问傻了,这个问题我随便答了一下。。貌似说错了。
事后冷静地回想一下,应该是传的引用吧,好像当时我说错了,主要是那时候已经被问的混乱了。
算了,最后用一段TEST代码结束这篇文章吧
<? Class Test{ function __construct(){ echo "construct start<br>"; } function setName($name){ $this->name = $name; } function getName(){ return $this->name; } } $test = new Test(); $test->setName("daibi"); $name = $test->getName(); echo $name."<br>"; function difTest($t){ $t->setName("shabi"); $name = $t->getName(); echo $name."<br>"; } difTest($test); $name = $test->getName(); echo $name."<br>";
输出结果:
construct start
daibi
shabi
daibi
shabi
shabi
0 0
- 今天被问到一些PHP的基础问题一下子被问住了。。唉,人老了很多基础都忘了
- 今天在群里遇到的一道很基础但是困扰了很多人的问题
- 今天升级了一下子CentOS
- 驱动开发基础知识 偶然发现的,很全面,一下子解决了我很多问题。
- 感觉老了很多
- 今天的一下子跳出来了的超级玛丽
- 大概很多人都忘却了“工信部”的前身了
- 最近在学习windows 编程,了解了很多的基础的东西,遇见了很多的问题
- 今天写了一些基础代码,发现自己的奇技淫巧略微多了些
- 两天的努力,呵呵SQL算看完基础的了!刚才写的BLOG一下子没有了~_~
- 爸爸都老了!
- 呵呵,今天的“清晨”又花了很多时间“爬网”,找到了一些东西。
- 网站的排名一下子掉下去了是什么问题/
- 基础知识面试,看看你的基础都忘了没?
- 今天看了老张的《十面埋伏》
- 今天学了很多东西......................
- 今天做了很多事!
- 今天做了很多决定
- Ognl表达式 值栈对象ValueStack
- JavaScript 中的json
- 南阳 oj 语言入门 cigarettes
- tcp/ip学习笔记
- 南阳 oj 语言入门 The Famous Clock
- 今天被问到一些PHP的基础问题一下子被问住了。。唉,人老了很多基础都忘了
- *HDU 5305 - Delicious Apples (贪心+背包)
- hdu 题目分类
- HDU oj Encodeing
- 详解Python中函数参数
- 杭电 1201 18岁生日
- HDU 1010 Tempter of the Bone
- 图的割边
- LintCode - Remove Duplicates from Sorted List