PHP5 class 学习笔记1
时间:2006-08-23 来源:inu
闲的无聊,把网络上较流行的关于PHP5面向对象的部分看了看,边看边做笔记,希望和我一样的
菜鸟的PHPer可以交流一下。
PHP5和PHP4稍有不同的是类的实例可以作为函数的参数或者作为类中方法的参数进行传递。
传递的方法为传递这个实例的地址。像是引用传递。如果函数改变这个参数的属性值,
会影响到其他函数使用的这个参数的属性值。
比如建个简单的类
Class VarClass{
Public $name='null';
Public function set($str){
$this->name = $str;
}
Public function p(){
Print("My name is : $this->name
\n");
}
}
//可以做为类方法中的参数进行传递
Class TestClass{
Public function make(VarClass $t){
$t->p();
}
}
//也可以做为普通定义的函数参数进行传递
Function TestFun(VarClass $t){
$t->p();
}
//可以这样测试运行。
$test = new VarClass;
$test->set('Tester');
//做为类方法中的参数,它能正确的运行。
TestClass::make($test);
//输出为:My name is : Tester
//做为普通自定义的函数的参数。它也能很好的运行。
TestFun($test);
//输出为:My name is :
Tester
?>
如果上面的$test不是VarClass的一个实例的话,则会产生一个 fatal (致命的) 错误。程序被终止运行。
可以把上面的TestClass::make($test);改成
TestClass::make($test1);
或者 TestFun($test); 改成 TestFun($testx);等,都会得到一个致命的错误。
参数的传递不再是PHP4中的值传递。而是句柄(或者说是实例的指针)如果对这个的参数的属性进行更改。
会影响到其他使用它的函数。
比如修改上面那段代码
Class VarClass{
Public $name='null';
Public function set($str){
$this->name = $str;
}
Public function p(){
Print("My name $this->name
\n");
}
}
Class TestClass{
Public function make(VarClass $t){
$t->set('was modified by TestClass');
$t->p();
}
}
Function TestFun(VarClass $t){
$t->set('was modified by TestFun');
$t->p();
}
//可以这样测试。
$test = new VarClass;
$test->set('is Tester');
//开始看看没有被改变的值
$test->p();
//输出为:My name is
Tester
//在TestClass中被更改后
TestClass::make($test);
//输出为:My name was
modified by TestClass
//在TestFun中被更改后
TestFun($test);
//输出为:My name was modified by
TestFun
最后我们看看原来的实例的输出。
$test->p()
//输出为:My name was modified by
TestFun
?>
以上测试环境为WINXP+APACHE2+PHP5.1.4 先写这些,等看到后面再写笔记了。^o^
相关阅读 更多 +