PHP在声明一个成员变量时,你可能会遇到以下问题。
1。__construct()
实例化对象时被调用,
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
这是一个从Java迁移过来的程序员犯的错误。很悲剧,花了许多时间来解决。
2。__destruct()
遇到情况
当删除一个对象或对象操作终止时被调用。
我们先来看看,正确的定义一个成员变量。如果学过其他的语言,我们很快就会发现,这样的结构我们是很熟悉的。
3。__call()
对象调用某个方法,
若方法存在,则直接调用;
若不存在,则会去调用__call函数。
一个简单的声明成员变量
4。__get()
读取一个对象的属性时,
若属性存在,则直接返回属性值;
若不存在,则会调用__get函数。
class Test{
public $a = "ab";
}
5。__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。
接下来,我们定义的字符串比较长,需要采用字符串的拼接来进行。如果改成这样的命名,将ab与cd拼接在一起,这样就报错了,说语法错误。
6。__toString()
错误的拼接了字符串
打印一个对象的时被调用。如echo $obj;或print $obj;
<?php
class Test{
public $a = "ab"."cd";
}
$t = new Test();
echo $t->a;
?>
会出现错误
7。__clone()
Parse error: syntax error, unexpected '.', expecting ',' or ';' in ..../test.php on line 4
克隆对象时被调用。如:$t=new Test();$t1=clone $t;
也许,你曾今见过这样的拼接字符串,而且能够正确运行。
8。__sleep()
在方法中可以进行字符串拼接,正常工作
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
$str = "ab"."cd";
echo $str;
9。__wakeup()
而且如果你知道Java语言声明成员变量,那么知道一下定义没问题。
unserialize时被调用,做些对象的初始化工作。
Java中进行成员变量字符串拼接
10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)。
class Test{
String str="ab"+"cd";
}
从Java的风格到PHP的风格,于是就杯具了。完全不对。看着php中的定义一个字符串没问题,但是在成员变量中就报错误。
11。__unset()
unset一个对象的属性时被调用。如:unset($c->name)。
原因 – 解释
12。__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。
说了static的静态变量,是不运行进行赋值表达式的,只能使用 literal和const。
魔术常量
同样的,属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。即成员初始化只能使用简单类型(字符串,整形,数组等),不能有函数和运算符。详情请见:http://php.net/manual/zh/language.oop5.properties.php
1。__LINE__
返回文件中的当前行号。
另外,使用var声明一个成员变量新版本已经废弃了。如果看代码看到这样的,千万不要这样学习。
解决
2。__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP
4.0.2 起,__FILE__
总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
本文由澳门新葡亰网址大全发布于网络时代,转载请注明出处:php声明(静态)字符串成员变量实例
关键词: