Archive For The “php学习笔记” Category

PHP新增魔术方法 __invoke 及其他魔术方法详解

class CallableClass   {   public function __invoke($x)   {   var_dump($x);   }   }   $obj = new CallableClass;   $obj(5);   var_dump(is_callable($obj));   ?> 注意:$obj(5);    这里用了$符号,和()括号。 想变量,又像放法。奇怪吧,呵呵呵。 附:PHP其他魔术方法详解   php中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。    __construct,   __destruct,   __call,   __callStatic,   __get,   __set,   __isset,   __unset, __sleep,   __wakeup,   __toString,   __invoke,   __clone   ◆__get($property)当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。   ◆__set($property,$value)给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。   这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。   与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。   这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方?法,如果本类中不存在__call()方法就去找父类中的__call()方法。   __autoload函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在php出错失败前有了最后一个机会加载所需的类。   注意:在__autoload函数中抛出的异常不能被catch语句块捕获并导致致命错误,所以应该在函数本身做捕获。   ◆__construct构造方法,当一个对象创建时调用此方法,相对于php4使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称。   ◆__destruct析构方法,php将在对象被销毁前(即从内存中清除前)调用这个方法。默认情况下,php仅仅释放对象属性所占用的内存并销毁对象相关的资源,析构函数允许你在使用一个对象之后执行任意代码来清除内存。当php决定你的脚本不再与对象相关时,析构函数将被调用。   在一个函数的命名空间内,这会发生在函数return的时候。对于全局变量,这发生于脚本结束的时候。如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为null或者调用unset。   php5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法,如果在对象复制需要执行某些初始化操作,可以在__clone方法实现。注意:防止类被克隆,可以在类里重写__clone 就是给这个方法加一个私有声明 private __clone(){} 这样在类的外部就无法使用 __clone()方法了。连接数据库类可以这样使用,起到一定的保护作用。   __tostring方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时。   在php5.2.0之前,__tostring方法只有结合使用echo()或print()时才能生效。php5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但不能用于非字符串环境(如使用%d修饰符)。从php5.2.0,如果将一个未定义 __tostring方法的对象转换为字符串,会报出一个e_recoverable_error错误。   ◆__wakeup反串行化的时候调用 [...]

Read more »

程序员每天该做的事情

不重视细节,如何谈得上成功! 1)程序员每天总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 2)考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作 3)考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢 4)考虑自己一天工作完成的质量和效率能否还能提高 一天只提高1%,365天你的效率就能提高多少倍你知道吗? (1+0.01)^365 = 37 倍 5)看一个有用的新闻网站或读一张有用的报纸,了解业界动态 闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示 6)记住一位同事的名字及其特点 你认识公司的所有同事吗?你了解他们吗? 7)清理自己的代码 今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗? 8)清理自己的桌面 当日事当日毕,保持清洁干劲的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净

Read more »

php中__CLASS__与get_class 的区别

<?php /* * Author : Fanglor * Email : Fanlor@163.com * Url : www.skyleft.com * Date : 2011-06-28 */ class Test__CLASS__ {   var $url = ”;   function __construct () { $this->url = __CLASS__; }   function get_url () { return $this->url; } }   class ChildTest__CLASS__ extends Test__CLASS__{   function __construct () { [...]

Read more »

easyphp 框架V1.0发布了

easyphp 框架简介 fanglor 2011-05-26 1.easyphp 是什么? easyphp 是一个简单实现了MVC模式、统一入口及常用函数集成的易用的php框架 2.文件结构 ————————– │  admin.php │  index.php │ ├─admin    //后台项目文件夹 │  ├─controller │  ├─model │  └─view ├─app     //前台项目文件夹 │  │  index.php   //默认空白文件 │  │ │  ├─controller │  ├─model │  │ │  └─view │      └─public ├─cache    //缓存文件夹 │  ├─data    //数据缓存文件夹 │  └─template   //模板编译文件夹 │ ├─core    //模板核心文件夹 │  │  base_controller.class.php //controller层基类,里面集成了实例化的mod和view ,以及框架起动函数 │  │  base_model.class.php  //model层基类,继承于mysql类 │  │  base_view.class.php  //view层基类,内部实例化了smarty [...]

Read more »

Function set_magic_quotes_runtime() is deprecated

php 出现 Function set_magic_quotes_runtime() is deprecated 怎么办 ?

Read more »

php不为人知的函数register_shutdown_function的用法

php不为人知的函数register_shutdown_function 的用法小探

Read more »

怎样把一维数组的每四位作为一个单元转成二维数组?

php一维数组转二维数组

Read more »

php获取汉字拼音首字母函数

<?php function getfirstchar($s0){ $fchar=ord($s0{0}); //修正了首字母是拼音的情况 if($fchar>=ord("A") and $fchar<=ord("Z") ) { return $s0{0}; } if($fchar>=ord("a") and $fchar<=ord("z") ) { return strtoupper($s0{0}); } //$s=iconv("UTF-8","gb2312", $s0); $asc=ord($s0{0})*256+ord($s0{1})-65536; if($asc>=-20319 and $asc<=-20284)return "A"; if($asc>=-20283 and $asc<=-19776)return "B"; if($asc>=-19775 and $asc<=-19219)return "C"; if($asc>=-19218 and $asc<=-18711)return "D"; if($asc>=-18710 and $asc<=-18527)return "E"; if($asc>=-18526 and $asc<=-18240)return "F"; if($asc>=-18239 and $asc<=-17923)return "G"; if($asc>=-17922 and $asc<=-17418)return [...]

Read more »

php汉字转拼音函数(gbk版)

让我们来看看 php 中怎么把汉字转换成拼音吧。 看下面代码。 function __Dictionary($num) { $dictionary = array( array("a", -20319), array("ai", -20317), array("an", -20304), array("ang", -20295), array("ao", -20292), array("ba", -20283), array("bai", -20265), array("ban", -20257), array("bang", -20242), array("bao", -20230), array("bei", -20051), array("ben", -20036), array("beng", -20032), array("bi", -20026), array("bian", -20002), array("biao", -19990), array("bie", -19986), array("bin", -19982), array("bing", -19976), array("bo", -19805), array("bu", -19784), array("ca", -19775), array("cai", [...]

Read more »

发一个用php curl发新浪微博函数

下午折腾了半天,终于写好了一个 用 php curl发新浪微博的函数 现共享给大家。 有了这个函数,我们可以直接用在我们的项目中,把信息直接同步到新浪微博了。   function sendWeibo ($name,$password,$content) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL,"http://api.t.sina.com.cn/statuses/update.json?source=3350827508"); // 设置是否显示header信息 0是不显示,1是显示 默认为0 curl_setopt($curl, CURLOPT_HEADER, 0); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。0显示在屏幕上,1不显示在屏幕上,默认为0 curl_setopt($curl,CURLOPT_TIMEOUT,10); curl_setopt($curl,CURLOPT_HEADER,1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 要验证的用户名密码 curl_setopt($curl, CURLOPT_USERPWD, "{$name}:{$password}"); curl_setopt($curl,CURLOPT_POST,1); curl_setopt($curl,CURLOPT_POSTFIELDS,’status=’.urlencode($content)); $data = curl_exec($curl); curl_close($curl); } 测试代码 : sendWeibo (’fanglor@qq.com’,'******’,'北京星模实训学校,专业php培训机构!’);

Read more »

程序员进阶的建议:多看、多写、多交流

很多初学者都说入门之后不知道该如何提高,我都是告诉他们多实践。最近在我们的团队中建立了一个学生的实习小组,我在和他们讲授程序设计分析的时候,我也给他们了个小建议写代码就是多看、多写,后来又补上一点:多交流。 我认为不管是做什么行业或工作,只要专注都可以有自己不同的成就。因此我觉得做任何事必需要有热情,而且是持续的热情,有一句话说“好的开始是成功的一半,持之以恒是成功的另一半”我很认同,所以自己的认定的事情就应该坚持的去做。我提出了三多:多看、多写、多交流,来将热情付出行动。 这里谈到的是当你入门后怎么使自己不段的提高的一些方法,可能只是一些片面之词,但我相信只要你去做了都会有一些收获。 在我们开始学习程序,都必须对一些基础知识进行学习,例如语法、常用的内置函数,就PHP来说内置函数有成百上千个(没有统计过),就常用的也有上百个。怎么才可以对这些逐个掌握?死记硬背?这是一个常人都无法做到的,即使是记住了,通常能否灵活的应用还要打个问号。那该怎么做呢? 首先是多看,看技术文章,看开源代码。 技术文章应该不必多说,这是学习新技术和积累技术的必备渠道。这里我谈谈该怎么看,很多人包括我自已有时候,只是看一遍就算了,这样的结果一般都是知其然不知所以然。我认为要把别人的东西变成自己的必须实践。把文章所说的技术通过自己理解的写出来并改进,并在合适的时候尽快应用的你的实际工作中。 再说看代码,一是一些网友的代码,这里就要有一个观念,就是不能迷信别人的代码,应该客观的去看,学习别人的方法的时候,应该去考虑它是否有问题,应该是辩证的态度对对待,如果有问题自己试着去解决,并和他们交流。二是看开源项目中的代码,这类就不仅仅是看代码了还有框架、设计思想等。我建议每个人至少看到1到2套开源代码,因为我认为开源代码对自己的提高比一般的技术文章要快的很多。首先它们都是一些较为成功的项目,在成功项目中其实包含了原作者的经验和其项目不断改进中产生的非富经验。对于开源项目,我的方法是先从它的入口文件看起一般是index.php看它的整体文件结构,再看它的公共文件里的内容,具体的一些常用的工具类,这样会对整个项目的结构有一个了解,然后就是你所兴趣的功能的具体实现代码,并详细搞懂他的实现方式和原理。在看的过程中你肯定可以学到很多有价值的东西。我个人的经验是:看的最多的是DZ的代码,其它项目也很多,但比较全面的还是dz的代码。个人认为看代码还是比较速成的一种方式,因为别人的走过的路你就不需要再走了,站在巨人的肩膀上总是可以走的更快更远。 关于多写其实上面也提到了,学习后的东西应该要马上实践,并尽快在合适的时候应用到自己的工作中,这样才能收获的更多更快。另一方面是自己尝试着去写一些小项目,只有去做一完整性的项目才是最有价值的实践,但在做这些实践中我认为应该严格的要求自己,既然是为了学习,就不是应该敷衍了事,尽可能把所有细节都处理的最好。还有就是时间一定要要求自己,不能拖,一方面是要给自己压力,二是如果时间拖的太久思路和激情没法持续的话,那你的计划很可能最终会失败并不了了之。 开篇我提到很多初学者都说入门之后不知道该如何提高,我都告诉他们要多写,为什么会无法提高,我认为是没有目标,只要你给自己定一个目标,然后去实现,完成后其实也达到自己提高的目的了。例如你去写一个简单的博客程序,在实现的过程中会遇到很多问题,再逐一去解决,这样你就有了学习的方向了,解决问题就是积累经验和学习的过程。总的来说要给自己设置一个需要完成的目标,这个目标是什么有什么内容,什么时候完成都很清楚。 其实说到这里就可以回答上面该如何去掌握那么多的函数呢,当你看过和写过很多代码后你会发现你所掌握的函数和方法已经很多了,这就是在实践的过程中无形产生的结果。所以什么语法之类的基础的东西是不需要去死亡硬背的,在运用的时候自然就可以对它驾轻就熟。 最后我认为做技术的交流很重要,因为做技术是个永无止境的学习过程,而交流是一种更有效的学习方式。因为每个人的知识系统都是不同的,每个人掌握的东西不同,思维方式各异。所以交流就是一个互相学习和促进的过程,当你把自己的想法与别人交流你就会收获更多新的想法。交流是一咱倍速增长的过程,前一段我写了一篇《当你开启一扇门的时候,很多扇门将为你开启》给我们的团队就是想表达这个想法。 交流有很多的,有线上的有线下的,大家都有上论坛的习惯,这是一种交流方式,但我认为线下交流更有效,语言的交流比文字的交流方式更直接和全面。因为我是PEA福州的常委之一,很多线下活动是由我组织的,从参加人数来看并不是很理想,所以我认为做技术的应该更开放一些,多参加类似PEA的这种交流。 交流一定要是开放的,所以在交流中应该是一种包容的心态去面对。也就是说我们是持有自己想法的时候也应该耐心倾听他人的意见,不能认死理。只有站在客观的角度去看问题才能把问题看的更透彻,只有不抵触才能让自己学到更多的东西。 在我们的技术团队中有定期的技术分享会,目的就是为了建立交流的平台,让大家都尝试表达自己的意见,锻炼自己的能力,并可以和更多的人去交流。 最后总结一下,多看,吸收别人的经验转化为自己所用,多写,全面性的锻炼自己的能力,多交流,利用众人的智慧。三多更多的就是去做。

Read more »

用php遍历目录下的所有文件

收集的一个php遍历目录的函数,用到内置的 RecursiveDirectoryIterator 对象。   function get_files($name) { $dir = new RecursiveDirectoryIterator($name); $files = array(); for (; $dir->valid(); $dir->next()) { if ($dir->isDir() && !$dir->isDot()) { if ($dir->haschildren()) { $files = array_merge($files, get_files($dir->key())); }; }else if($dir->isFile() ){ $files[] = $dir->getPathName(); } } return $files; }

Read more »

php怎样检查IP地址是否正确

php检查IP地址的正则函数

Read more »

php中无法加载php_curl.dll

php中开启curl后依然报Fatal error: Call to undefined function curl_init()错解决办法

Read more »