php是一种弱类型检查语言,变量或者常量的数据类型由程序的执行顺序决定
1、字符串
通常使用一对单引号''或双引号""来定义字符串,但是他们在功能上有明显的差异,双引号支持变量的解析和转义字符。在解析变量时,解释器会尽可能多的取得“$”后面的字符以组成一个合法的变量名。可以用大括号把变量名括起来,以明确表示一个变量。
<?php $title='php100'; echo '$title is Website'; //结果:$title is Website echo "$title is Website"; //结果:php100 is Website echo '${title} is Website'; //结果:php100 is Website echo '{$title} is Website'; //结果:php100 is Website echo '\$title is Website'; //结果:$title is Website ?>
2、 php中面向对象的使用_set()和_get(),通常命名为function_set()和function_get(),直接为私有属性的赋值操作会自动调用set()方法,直接获取私有属性的操作会自动调用get()方法。
_isset()方法,检查属性是否被设置,_unset()方法,删除这一属性的值。成员是公有的在外部可以完成测试和删除,如果是私有的在外部访问不到,只能在内部测试。
isset()和unset()也可以做成私有的,只需要在类中加入类似如下代码即可:
private function_isset($nm){ echo "当在类的外部调用使用isset()函数测定私有成员时,自动调用<br>"; return isset($this->$nm); }
unset()和isset()一样。
3、var_dump -- 打印变量的相关信息,遇到数组时,会递归展开。
4、static对象是属于类的,不属于任何实例对象,因此static对象能够限制外部的访问。内存从逻辑上分为4段,如下表所示,其中对象放在“堆内存”中,对象的引用放在“栈内存”中,而静态成员则是放到了“初始化静态段”,是类在第一次被加载时放入的,可以让堆内存中的每个对象所共享。
栈内存 | 堆内存 | 静态内存 | |||
$pig | 0x9000 |
$name $color |
0x9000 0x9000 |
性别 | 雄性 |
$crow | 0x8000 |
$name $color |
0x8000 0x8000 |
||
$shark | 0x7000 |
$name $color |
0x7000 0x7000 |
类的静态变量,非常类似全局变量,能够被所有的实例共享。类的静态方法也是一样的,类似于全局函数。Java中可以使用静态对象的方式访问静态成员,如果php中可以使用对象访问静态成员,也尽量不要去使用,因为静态成员在做项目的时候目的就是使用类名去访问。类中的静态方法只能访问类的静态属性,类中的静态方法是不能访问类的非静态成员的。我们要想在本类的方法中访问本类的其他成员,需要使用$this这个引用,而$this这个引用指针是代表调用此方法的对象,而静态的方法是不用对象调用的,而是使用类名来发访问,所以根本就没有对象存在,也就没有$this这个引用了,所以就不能访问类中的非静态属性。
因为$this不存在,在静态类中访问其他静态成员时,使用self来访问其他静态成员。访问方式为: animal:$sex或者self:$sex
5、final关键字 在php中final关键字只能用来定义类和方法,不能用来定义成员属性,因为final是终结的意思。不能继承,不能重写。php中定义常量使用的是define()函数,所以不能使用final来定义成员属性,使用final关键字标记的类不能被继承。
6、self关键字 self关键字是指向类自身,也就是self关键字不指向已经实例化的任何对象,self一般指向类中的静态变量。
7、const关键字 const是一个定义常量的关键字,在php中定义常量使用define()函数,但是在类中定义常量使用的是const关键字,类似于C中的#define。const修饰的成员的访问方式和static修饰的成员的访问方式差不多,也是使用类名,或者使用self关键字,但是不使用"$"符号,也不能使用对象来访问。访问方式为myClass:myConst或者self:myConst
8、_toString()方法可以使对象通过echo直接打印出对象的内容,需要自己定义
9、_clone()克隆 当需要两个一摸一样的对象时,使用new关键字创建后仍要重新复制,繁琐且容易出错,所以克隆很有必要,克隆后两个对象互不干扰。要想克隆后改变原来的内容,需要在_clone()中重写原来的方法,命名为function_clone()。
10、_call()吸错 程序开发中,如果使用对象调用对象内部的方法时,调用的方法不存在,就会出错,程序会自动退出,但是如果使用_call(),当调用的方法不存在时,自动调用call(),给出提示,程序继续能够执行。
也是自动调用的方式。
function_call($function_name, $args){ print "你所调用的函数:$function_name(参数:"; print_r ($args); print ")不存在!<br>\n"; }
11、_autoload() 自动加载 有了这个类,脚本引擎在php出错失败前有了最后一次机会加载所需的类。_autoload()函数接收的一个参数就是用户想要加载的类名,所以在开发项目时,在组织定义类的文件名时需要按照一定的规则,最好以类名为中心,也可以加上统一的前缀或后缀形成文件名,如xxx_classname.php、classname_xxx.php就是classname.php等。
<?php function __autoload($classname) { require_once $classname . '.php'; } // MyClass1 类不存在自动调用__autoload()函数,传入参数”MyClass1” $obj = new MyClass1(); // MyClass2 类不存在自动调用__autoload()函数,传入参数”MyClass2” $obj2 = new MyClass2(); ?>