一、PHP常用基础知识
1、PHP的魔法函数
-
__construct():实例化对象时被调用。
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。如果父类中存在魔法函数和构造函数,子类又重写构造函数,则实例化子类时调用子类中的构造函数。 -
__destruct():当删除一个对象或对象操作终止时被调用。
-
__call():对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。
-
__get():读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
-
__set():设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。
-
__toString() :打印一个对象的时被调用。如echo $obj;或print $obj;
-
function __toString() { return $this->content; } //输出字符串 function toString() { return $this->content; }
-
执行的结果相同. 区别在于:
-
前一个是魔术函数, 在需要字符串值的地方会自动调用它进行对象的类型转换.(如用 echo进行输出时、强制类型转换时)
-
后一个需要在代码中明确调用才有机会执行.
-
-
-
__clone():克隆对象时被调用。如:$t=new Test();$t1=clone $t;
-
__sleep():serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
-
__wakeup():unserialize时被调用,做些对象的初始化工作。
-
__isset():检测一个对象的属性是否存在时被调用。如:isset($c->name)。
-
__unset():unset一个对象的属性时被调用。如:unset($c->name)。
-
__set_state():调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
-
__autoload():实例化一个对象时,如果对应的类不存在,则该方法被调用。
2、PHP的魔法变量
-
__LINE__:返回文件中的当前行号。
-
__FILE__:返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。
-
__FUNCTION__:返回函数名称(PHP4.3.0新加)。自PHP5起本常量返回该函数被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的。
-
__CLASS__:返回类的名称(PHP4.3.0 新加)。自PHP5起本常量返回该类被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的。
-
__METHOD__:返回类的方法名(PHP5.0.0新加)。返回该方法被定义时的名字(区分大小写)。
3、public 、protected、private
-
public 表示全局,类内部外部子类都可以访问;
-
protected表示受保护的,只有本类或子类或父类中可以访问;
-
private表示私有的,只有本类内部可以使用。
4、PHP中的操作符::、->、self、$this
-
操作符
静态变量:静态变量是指用static声明的变量,这种变量与局部变量的区别是,当静态变量离开了它的作用范围后,它的值不会自动消亡,而是继续存在,当下次再用到它的时候,可以保留最近一次的值。 - 自定义常量:定义方式如下: define("YEAR","2012"); 所谓自定义常量,就是指用一个字符标识来代表另外一个对象,这个对象可以是一个数值,一个字符串,一个布尔值等等。它的定义与变量有着许多相似之处。只有一点不一样,那就是变量的值在程序运行过程中可以任意更改,而自定义常量一旦定义下来后,在程序运行中就再也不能修改了。
- 在类的外部访问:(操作符->) 如果被引用的变量或者方法没有被声明成const或者static,那么就必须使用操作符-> (操作符:: )在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::
- 在类的内部访问:(操作符 $this) 如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this
- (操作符 self) 如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self
-
实例
-
<?php /* *author:ajax123 *qq:283400245 */ class person{ static $name="ajax123";//static声明静态属性 static $age=25;//static声明静态属性 static $address="北京";//static声明静态属性 function song(){ echo "My name is : ".self::$name."<br>";//类内部:通过通过self 类访问静态属性 echo "I am ".self::$age."<br>";//类内部:通过通过self 类访问静态属性 echo "I live in ".self::$address."<br>";//类内部:通过self 类访问静态属性 } } echo person::$name."<br>";//类外部:通过类名person访问静态属性 echo person::$age."<br>";//类外部:通过类名person访问静态属性 echo person::$address."<br>";//类外部:通过类名person访问静态属性 ?>
-
5、自动转义配置 magic_quotes_gpc 和 magic_quotes_runtime
PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在 php.ini设置为ON的时候,就会为我们引用的数据碰到单引号'和双引号"以及反斜线 \ 时自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的 magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情况。
那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明:
-
magic_quotes_gpc
作用范围:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时. -
magic_quotes_runtime
作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据.
所以 magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据;magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据。
例子说明:
<form action="" method="post" >
STR:<input type="text" name="str">
<input type="submit">
</form>
<?php
/* 我们在表单里填写: '"\ 这些符号,如果magic_quotes_gpc没有开启,那么他们不会被反斜杠转义 */
echo '现在通过POST传递过来的值是:' ,$_POST['str'], '<br />';
if (get_magic_quotes_gpc()) { // 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义
$str = $_POST['str'];
} else {
$str = addslashes($_POST['str']);
}
echo '这里是转义过后的:' ,$str, '<hr />';
$sql = "INSERT INTO lastnames (lastname) VALUES ('$str')";
//=====================================================================================
//-----magic_quotes_gpc只会转义: 通过Get/Post/Cookies获得的数据
//-----magic_quotes_runtime会转义:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的
//=====================================================================================
$data = implode(file('try.php')); // 我们在里面依然写'"\这几个字符,用来测试
echo '这里是try.php的数据,';
if (get_magic_quotes_runtime()) {
$data = $data;
echo '被系统自带转义的' .$data;
} else {
echo '被addslashes转义了的' .$data = addslashes($data);
}
$sql = "INSERT INTO lastnames (lastname) VALUES ('$