php错误调试和异常处理
?
1、Php面向对象
从php4版本开始引入了面向对象的概念,Php并不是完全面向对象的编程语言,只是引入了面向对象的思想。但php可以把相关方法放入到一个类中,也实现了在参数传递中传递对象的功能。Php5更完整的支持了面向对象。所以Php是面向过程的,也是面向对象的。
1.1、???? 定义类、属性和方法:
当定义一个PHP类的时候,必须使用关键字“class”。”var”来声明变量。
class classname
{???????????? }
Class classname
{
var $variable1;
var $variable2;
……
}
Class classname
{
var $variable1;
var $variable2;
function func1()
{??? }
Function func2($param1,param2)
{??? }
}
1.2、???? 类的使用:
1)、类的实例化:使用关键字“new”来创建一个类实例。
$objectname = new classname();
$objectname = new classname(“a”);
2)、类属性的使用:访问类成员变量有一个特殊的指针——$this。
$objectname = new classname();
$objectname -> variable = ‘属性’;
echo $objectname -> variable;
3)、类方法的调用:
$objectname = new classname();
$objectname -> func1(“a”);
$value = $objectname -> func2 (“1”,”2”); //定义变量接受返回值
1.3、???? 构造函数、析构函数:
1)、构造函数:
class classname
{
function _construct ($param)
{
????????????? //代码
}
}
2)、析构函数:
与构造函数相对应的是析构函数,它是PHP5新增加的内容。析构函数是一种当对象被销毁时,无论使用了unset()或者简单的脱离范围,都会被自动调用的函数。
一个类的析构函数名称必须是_destruct();析构函数不能带任何参数;
1.4、???? 类的访问控制:
1)、public 表示全局,类内部外部子类都可以访问。默认修饰符。
2)、private表示私有的,只有本类内部可以使用。
3)、protected表示受保护的,只有本类或子类或父类中可以访问。
1.5、???? 继承和接口的实现:
1)、继承。如果类是另一个类的子类,可以用关键字“extends”来指明其继承关系。
2)、接口。PHP5引入了接口,接口可以看做是多重继承问题的解决方法,对象就可以方便地使用“implements”。
<?php
????????????? interface name1{
??????????????????????????? function func1();
????????????? }
????????????? interface name2{
??????????????????????????? function func2();
????????????? }
????????????? class classname implements name1,name2{
??????????????????????????? function func1() {
????????????????????????????????????????? //函数代码
??????????????????????????? }
??????????????????????????? function func2() {
????????????????????????????????????????? //函数代码
??????????????????????????? }
????????????? }????????????
?>
1.6、???? 多态的实现:
多态是对象的一种能力,它可以在运行时刻根据传递的对象参数,动态地决定调用一个对象的方法。
class shap
{
function area($x)
{
????? return $x;
}
}
class rectangle extends shap
{
function area($x,$y);
{
????? return $x*$y;
}
}
class circle extends shap
{
function area($x)
{
????? return 3.14*$x*$x;
}
}
$a = new shap();
echo “图形的边长是:”.$a->area(“5”).”<br>”;
$c = new rectangle();
echo “矩形的面积是:”.$c->area(“3”,”5”).”<br>”;
$b = new circle();
echo “圆形的面积是:”.$b->area(“3”).”<br>”;
1.7、???? 作用域分辨运算符:
“::” 作用域分辨运算符可以在没有声明任何实例的情况下访问类中的函数或者基类中的方法和属性。
class A {
function func1{
}
}
A::func1();
1.8、???? parent关键字:
用于访问基类的属性和方法。
1.9、???? final关键字:
当在一个函数声明前面使用该关键字时,这个函数将不能被任何子类重载。
1.10、? static关键字:
用于允许在未经初始化类的情况下调用类的属性和方法。
class classname{
????????????? static function add($param1,$param2) {
??????????????????????????? return $param1+$param2;
????????????? }
}
echo classname :: add (3,5);
注意:在一个静态方法中,不能使用“this”关键字,因为可能会没有可以引用的对象实例。
示例:0401.php、0402.php、0403.php
?
2、Php错误调试和异常处理
2.1、异常处理:
try
{
????????????? //错误出现的地方
}
2.2、抛出异常:
thorw new Exception(‘message’,code);
2.3、捕获异常:
<?php
try
???????? {
????????????? ????????????? throw new Exception (‘a terrible error has occurred’,42);
???????? }
???????? catch (exception $e)
???????? {
????????????? ????????????? echo ‘exception’ .$e->getcode() ‘:’ $e -> getmessage()<br/>
???????? }
?>
2.4、错误报告:
文件php.ini中:
display_errors = off
error_reporting = E_ALL
?