php __FILE__,__CLASS__魔术变量使用方法
今天看到一个魔术变量,是以前没见过的,__DIR__,我查了查,发现原来是php5.3新增的,顺便举几个例子,解释一下php的魔术变量
系统常量
__FILE__ 当前文件名
__LINE__ 当前行数
__FUNCTION__ 当前函数名
__CLASS__ 当前类名
__METHOD__ 当前对象的方法名
详细分析
1,__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
PHP 常量dirname(__file__)
__FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
1)dirname(__FILE__) 函数返回的是脚本所在在的路径。 更新网络
比如文件 b.php 包含如下内容:
代码如下 | 复制代码 |
<?php $basedir = dirname(__FILE__); echo $basedir //将在页面打印出一个这个文件所在绝对路径! ?> |
我做的测试得到结果: E:websiteothertestcms
这个相当于, asp中的server.mappth的用法
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。 变量$basedir 的内容还是b.php所在的那个文件夹的路径。 而不是变成a.php文件所在的目录。
2)dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。
不会返回当前的文件名称。 dirname(__FILE__) 也可能返回一个 . (当前目录) [原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下
代码如下 | 复制代码 |
<?php /** 在你的公用的配置文件中,来设置你的根目录,这样就不用担心经常搬家了。 */ define(‘ROOT_PATH’, dirname(__FILE__) . DIRECTORY_SEPARATOR); echo ROOT_PATH; echo “<br>”; echo __FILE__; echo “<br>”; echo dirname(__FILE__); echo “<br>”; echo dirname(dirname(__FILE__)); ?> |
2,__LINE__
文件中的当前行号。这个变量在调试错误的时候,还是比较有作用的,其他的时候,没什么用处,纯属个人观点。
代码如下 | 复制代码 |
<?php echo __LINE__; //显示,__LINE__所在的行号 ?> |
3,__CLASS__
类的名称,PHP5返回的结果是区分大小写的
代码如下 | 复制代码 |
<?php class base_class { function say_a() { echo “‘a’ – said the ” . __CLASS__ . “<br/>”; } function say_b() { echo “‘b’ – said the ” . get_class($this) . “<br/>”; } } class derived_class extends base_class { function say_a() { parent::say_a(); echo “‘a’ – said the ” . __CLASS__ . “<br/>”; } function say_b() { parent::say_b(); echo “‘b’ – said the ” . get_class($this) . “<br/>”; } } $obj_b = new derived_class(); $obj_b->say_a(); echo “<br/>”; $obj_b->say_b(); ?> 结果为: ‘a’ – said the base_class ‘a’ – said the derived_class ‘b’ – said the derived_class ‘b’ – said the derived_class |
有的时候,我们可以用get_class来代替__CLASS__
4,__FUNCTION__和__METHOD__
__FUNCTION__:函数名称,php5中返回的结果是区分大小写的
__METHOD__:方法中的函数名称,php5中返回的结果是区分大小写的
二个都是取得方法的名称,有什么不同呢?
代码如下 | 复制代码 |
<?php class test { function a() { echo __FUNCTION__; echo “<br>”; echo __METHOD__; } } function good (){ echo __FUNCTION__; echo “<br>”; echo __METHOD__; } $test = new test(); $test->a(); echo “<br>”; good(); ?> 返回结果: a test::a good good |
相对于孤立的函数来说,二个都可以取出函数名,没什么区别,如果是class中的方法时,__FUNCTION__只能取出class的方法名,而__METHOD__不光能取出方法名,还能取出class名
5,__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
如果在5.3以前的版本中想用__DIR__的话,可以这样
代码如下 | 复制代码 |
<?php if(!defined(‘__DIR__’)) { $iPos = strrpos(__FILE__, “/”); define(“__DIR__”, substr(__FILE__, 0, $iPos) . “/”); } ?> |
6,__NAMESPACE__
当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增)
7,__STATIC__
当你调用class的静态方法时,返回class名称,区分大小写。如果在继承中调用的话,不管在继承中有没有定义,都能返回继承的class名。
代码如下 | 复制代码 |
<?php |
补充:php中魔术方法
__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用。
__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。
__get() 当试图读取一个并不存在的属性的时候被调用。
__set() 当试图向一个并不存在的属性写入值的时候被调用。
__call() 当试图调用一个对象并不存在的方法时,调用该方法。
__toString() 当打印一个对象的时候被调用
__clone() 当对象被克隆时,被调用
__isset()
__unset()
__autoload($classname)
__sleep()
__wakeup()
在网上找到一句: switch比较if具有速度优势,一个是采取转移地址列表的方法;还有就是switch一般在松散的情况下也多不采取"比较-转移 "的方法,而是用dec(sub)-jz的指令对,后者不仅是指令的长度变短了,速度上也有优势
下面我们来验证一下吧
If…Else 语句
如果您希望在某个条件成立时执行一些代码,在条件不成立时执行另一些代码,请使用 if….else 语句。
语法
if (condition) //设置条件
code to be executed if condition is true; //如果条件为真的代码被执行;
else
code to be executed if condition is false; //如果条件为假,代码被执行
实例1
如果当前日期是星期一,下面的代码将输出 “星期一快乐。”,否则会输出 “天天快乐。”:
代码如下 | 复制代码 |
<?php $d=date("D"); //变量d赋值 if($d=="Mon"){ echo "星期一快乐!"; }else{ echo "天天快乐!"; } ?> |
实例2
如果d等于1时输出“数字1”,否则输出“数字不是1”
代码如下 | 复制代码 |
<?php |
Switch 语句
语法
代码如下 | 复制代码 |
switch (expression) { case label1: code to be executed if expression = label1; break; case label2: code to be executed if expression = label2; break; default: code to be executed if expression is different from both label1 and label2; } |
实例
工作原理:
对表达式(通常是变量)进行一次计算
把表达式的值与结构中 case 的值进行比较
如果存在匹配,则执行与 case 关联的代码
代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
如果没有 case 为真,则使用 default 语句
代码如下 | 复制代码 |
<?php |
总结3点
1.PHP中有两个方法都是用于判断值是否满足条件,如果满足/不满足做出不同行为动作。
2.switch中的步长越短,效率越高,而if else 则更灵活,适合不只一个变量的比较。。
3.当被判断值为变量,ifelse的运行效率高于switch,ifelse贯彻一判到底的方针,会从第一个条件开始判断,直到最后一个else,所以学会使用switch有好处;
代码如下 | 复制代码 |
<?php 最简单字符串匹配算法php实现方式 P: abc ababcabc ababcabc ababcabc ||| ||| ||| abc abc abc (X) (X) (O) ababcabc ababcabc ababcabc */ for($i=0;$i<$strlen;$i++){ for($j=0;$j<$searchlen;$j++){ |
代码如下 | 复制代码 |
function NumToStr($num){ if (stripos($num,'e')===false) return $num; $num = trim(preg_replace('/[=\'"]/','',$num,1),'"');//出现科学计数法,还原成字符串 $result = ""; while ($num > 0){ $v = $num - floor($num / 10)*10; $num = floor($num / 10); $result = $v . $result; } return $result; } |
文件上传例子
代码如下 | 复制代码 |
<?php if(isset($_POST['submit'])){ $up = new UploadFile($uploads,'uploads',1024); if($num == $num_file ){ ?>
<body> |
文件上传类代码
代码如下 | 复制代码 |
<?php /** /** //文件大小 // if(!move_uploaded_file($tmp_name,$this->final_file_path)){ // return count($this->save_info); /* return TRUE; /* return FALSE; /* return $p['extension']; /* return $basename; /* function getSaveInfo() //$upload = new UploadFile('',''); ?> |
相关文章
- 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- 这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。  ...2017-07-06
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
- 许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21使用insertAfter()方法在现有元素后添加一个新元素
复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04