PHP中关键字与魔术方法介绍
PHP中常用的关键字
final
1、final只能修饰类和方法,不能修饰成员属性 作用:使用修饰的类不能被继承,修饰的方法不能被覆盖
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为
final,则不能被继承。
Example #1 Final 方法示例
代码如下 | 复制代码 |
<?php class ChildClass extends BaseClass { <?php class ChildClass extends BaseClass { |
static
1.使用static可以修饰成员属性和成员方法,不能修饰类
2.用static修饰的成员属性,可以被同一个类的所有对象共享
3.静态的数据是存在于内存中的数据段中(初使化静态段)
4.静态的数据是在类第一次加载时分配到内存中的,后面用到时就可以直接使用了
5.只要在程序中有这个类名出现,即是类被加载,静态数据就会被分配到内存中了 注:静态的成员都要使用类名访
问,不用创建对象,不要用对象去访问静态成员。 访问方法 类名::静态成员 如果在类中使用静态成员,可以使
用self代表本类 访问方法 self::静态成员
6.静态方法不能访问非静态成员,非静态方法可以访问静态成员,因为非静态成员必须用对象来访问,而静态成员不需
要
例1
代码如下 | 复制代码 |
<?php test(); |
例2
例子:
代码如下 | 复制代码 |
<?php // 子类中输出成员属性值 |
运行该例子,输出:
中国
我是中国人
我是中国人
中国
我是中国人
首先,我们知道PHP中调用实例方法都是通过如:someobj->someFun()调用,那么我们调用静态函数是否也能像C#那样
通过SomeClass->someFun()调用呢?答案是否定的,在PHP中,对静态成员的调用只能通过::的方式进行,如:
SomeClass::someFun()。
代码如下 | 复制代码 |
<?php class TestC { public static $var1=1; public $var2=1; function t1() { self::$var1+=2; echo self::$var1.' '; echo $this->var2.' '; } public static function t2() { self::$var1+=2; echo self::$var1.' '; } } $t=new TestC(); $t->t1(); TestC::t2(); ?> |
const
1.const只能修饰成员属性
2.类中使用const声明常量
3.用法类似定义一般常量
4.访问方式和静态成员是一样的(在类外 类名::常量名,类内 self::常量名)
5.常量一定要在声明时就给初值
语法:
const constant = "value";
例子:
代码如下 | 复制代码 |
<?php public function myCountry() { // 输出常量 // 访问方法 |
运行该例子输出:
中国
我是中国人
PHP中小常用魔术方法:
__call() 在调用对象中不存在的方法时,就会调用此方法。就会出现系统报错,然后程序会退出。声明此方法来对
错误进行操作,阻止程序崩溃。
__toString() 直接输出对象引用时调用,用来快速获取对象的字符串表示的最便捷的方式
代码如下 | 复制代码 |
<?php public function __construct($foo) public function __toString() { $class = new TestClass('Hello');
|
void __clone ( void )
当复制完成时, 如果定义了__clone()方法, 则新创建的对象(复制生成的对象)中的__clone()方法会被调用, 可
用于修改属性的值(如果有必要的话)。
代码如下 | 复制代码 |
<?php public function __construct() { public function __clone() { class MyCloneable function __clone() $obj = new MyCloneable(); $obj->object1 = new SubObject(); $obj2 = clone $obj;
print("Cloned Object:\n"); ?> |
__autoload() 其它的魔术方法都是在类中添加起作用,这个是唯一一个不在类中添加的方法 只要在页面中使用
到一个类,只要用到类名就会自动传进此方法
代码如下 | 复制代码 |
<?php |
Works fine. Then on a subsequent page load:
代码如下 | 复制代码 |
<?php |
Fatal error: The script tried to execute a method or access a property of an incomplete object. Please
ensure that the class definition "MyClass" of the object you are trying to operate on was loaded
_before_ unserialize() gets called or provide a __autoload() function to load the class definition.
But if you do this instead, it works fine:
代码如下 | 复制代码 |
<?php |
对象串行化:将一个对象转化为二进制串 1.将对象长时间存储在数据库或文件中时 2.将对象在多个PHP文件中传
输时 serialize():参数是一个对象,返回的是一个二进制串 unserialize():参数是对象的二进制串,返回的就是
新生成的对象 __sleep() 在序列化时自动调用的方法(serialize) 作用:可以将一个对象部分序列化 只要
这个方法中返回一个数据组,数组中有几个成员属性就序列化几个成员属性,如果不加,所有成员属性都被序列化
__wakeup() 在反序列化时自动调用的方法(unserialize) 也就是对象重新诞生的一个过程
注意事项:PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以当你定义类方法时,除了上述魔术方法,
建议不要以 __为前缀。
在php中获取文件的mime类型方法有很多种,我们来介绍直接利用mime_content_type()函数判断获取mime类型即可了。mime_content_type返回指定文件的MIME类型,
用法:
代码如下 | 复制代码 |
echo mime_content_type ( 'php.gif' ) . "n" ; echo mime_content_type ( 'test.php' ); |
输出:
image/gif
text/plain
但是此函数在php5.3.0以后就不可用了,如果你是php5.3.0以后版本我们可使用
代码如下 | 复制代码 |
$finfo = finfo_open(FILEINFO_MIME); |
来操作
下面介绍用户自定的我这个是没有php版本限制的。
代码如下 | 复制代码 |
<?php function _getMimeDetect() { function _getMimeType($path) { $path = '1.txt'; //实际上当前路径并不存在1.txt /*End of php*/ |
mkdir();函数
php创建文件夹和文件
///创建文件夹
代码如下 | 复制代码 |
function createdir($dir) { if(file_exists($dir) && is_dir($dir)){//如果存在这个文件并且这个文件是个目录就不动作 } else{ mkdir($dir,0777);//否则就创造这个目录 } } |
file_exists();函数
file_exists -- 检查文件或目录是否存在
代码如下 | 复制代码 |
<?php if (file_exists($filename)) { |
is_dir();函数
is_dir();测试文件是否为目录。
为目录就返回true,不就返回false
is_file();
Is_File('目标文件路径和文件名')
为文件返回"True",不为文件返回"False"。
is_link();
文件系统函数库
is_link();测试文件是否为链接文件。
true 值则表示指定的 filename 存在并为符号链接文件.
rmdir 命令
功能:删除空目录
rmdir [选项] dirname
- p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因
保留部分路径,则系统在标准输出上显示相应的信息。
要清空并除去目录,请输入:
rm mydir/* mydir/.*
rmdir mydir
该命令除去 mydir 文件中的内容接着除去空目录。rm 命令显示一条关于尝试除去目录 .(点)和.. (点,点)的错
误消息,然后 rmdir 命令除去它们。
建立一个文件名字为aa.txt
代码如下 | 复制代码 |
$fp=fopen('aa.txt', 'w+'); //建立一新文件 |
unlink()函数
功能:删除文件
unlink($filename)删除文件名为$filename的文件
删除指定目录下的所有文件
代码如下 | 复制代码 |
function dir_clear($dir) { 件 |
列出目录中包括子目录的所有文件程序
代码如下 | 复制代码 |
<?php |
删除指定目录下的所有文件以及所有文件夹以及本身***强烈推荐这种方法!!!
代码如下 | 复制代码 |
function rmdir_tree($dirname)//定义一个函数rmdir_tree,要删除的文件名为$dirname { $handle=opendir($dirname);//打开名为$dirname的文件夹 while ($file=readdir($handle)) //跑回圈读取打开的文件夹 { if (($file==".") || ($file=="..")) continue;//继续跑的条件,如果不满足就不跑了 $fullname=$dirname."/".$file;//完整的文件名(包括路径) if (filetype($fullname)=="dir") rmdir_tree($fullname);//调用刚刚定义的函数,实现递归 else unlink($fullname);//删除文件 } closedir($handle);//关闭打开了的文件夹 rmdir($dirname);//删除自身(文件夹) } |
phpmyadmin不能登录没有提示
解决方法:
1.在php的目录建立个文件夹tmp(如C:/php/tmp),设置tmp属性为ervery one完全控制
2.在php.ini找到session.save_path 这一行,设成session.save_path = “C:/php/tmp”,并把前面的分号去掉
以上的C:/php/tmp根据你实际情况设定
3.重启IIS服务。
终极解决方法
导致上述问题和一些与php程序相关的错误(如:xcache缓存功能不生效;php不保存session),根源在于,没有给php设
置temp目录!
1.在 c:windows下建立 temp 文件夹(用户存放php的文件),并设置相应的读写NTFS权限,确保php能正常访问此
目录
2.重启IIS.
简单带上phpMyAdmin登陆超时(1440秒未活动)解决办法
在phpMyAdmin所在目录找到 / libraries / config.default.php 文件,打开,修改
$cfg['LoginCookieValidity'] = 1440; 将1440修改成更大的值即可解决“现象一”
如果修改:$cfg['LoginCookieValidity']的值小于或等于php.ini里的session.gc_maxlifetime的值,即可解决”现
象二“
总结:最前讲述的是iis+php下重启iis,如果是apache我们重启apache即可了。
本文章完美的利用了php的curl功能实现模拟登录discuz以及模拟发帖,本教程供参考学习哦。代码如下 | 复制代码 |
<?php $discuz_url = ‘http://localhost/klive/root/Discuz_X2.5_SC_GBK/’;//论坛地址 $post_fields = array(); //获取表单FORMHASH $matches); //POST数据,获取COOKIE,cookie文件放在网站的temp目录下 $ch = curl_init($login_url); //取到了关键的cookie文件就可以带着cookie文件去模拟发帖,fid为论坛的栏目ID $ch = curl_init($send_url); ’, $contents, $matches); $post_data = array(); $ch = curl_init($send_url); //清理cookie文件 ?> |
相关文章
- 这篇文章主要介绍了C# 中的var关键字详细介绍的相关资料,需要的朋友可以参考下...2020-06-25
- yield这个关键字是和迭代器挂钩的,而且是与return一起以yield return的形式合用的,用来返回迭代器中的条目。...2020-06-25
- Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
- 对于批量替换关键字的问题,仅替换而言没什么可说的,但这里需要的是每个关键字仅需要替换一次就可以了。查阅了php相关函数文档,发现php本身是没有函数实现这个功能的,所以不得不自己解决了。总结了几种可行方法,小记一下! (1...2015-10-30
- 这篇文章主要介绍了c# volatile 关键字的相关资料,帮助大家更好的理解和学习c#的相关知识,感兴趣的朋友可以了解下...2020-12-08
Spring Data JPA 关键字Exists的用法说明
这篇文章主要介绍了Spring Data JPA 关键字Exists的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-10- 这篇文章主要介绍了如何用python获取txt文件中关键字的数量,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-12-24
PHP中print_r、var_export、var_dump用法介绍
文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25- 这篇文章主要介绍了Java类的访问权限关键字用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-29
Framewrok7 视图介绍(views、view)使用介绍
下面我们来看一篇关于Framewrok7 视图介绍(views、view)使用介绍吧,希望这篇文章能够帮助到各位朋友。 一、Views 与View的介绍 1,Views (<div class="views">) (1)Vi...2016-10-02- 这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
- 这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
- 这篇文章主要给大家介绍了关于Swift中static和class关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
- PHP日志类库在低版本中我们都没有看到了但在高版本的php中就有了,下面我们来看一篇关于PHP日志类库使用详解介绍吧. Monolog遵循PSR3的接口规范,可以很轻易的替换...2016-11-25
- 这篇文章介绍了php获取当前url地址的方法小结,有兴趣的同学可以参考一下 本文实例讲述了php获取当前url地址的方法。分享给大家供大家参考,具体如下: js 获取: ...2017-01-22
- 1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
- 这篇文章主要介绍了C#中var关键字用法,实例分析了C#中var关键字的应用场合,对于.NET的学习具有一定参考价值,需要的朋友可以参考下...2020-06-25
- 在php中要获取或目录权限我们可使用fileperms函数来获取,fileperms() 函数返回文件或目录的权限,。若成功,则返回文件的访问权限。若失败,则返回 false。 例子 1 ...2016-11-25
- C 语言restrict 关键字的使用浅谈,需要的朋友可以参考一下...2020-04-25
- 以下是对C#中fixed关键字的作用进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25