php学习笔记
l 定义一个变量要以$符号开头。
l Php的变量类型是变化的,php变量的数据类型是由运行时的上下文所决定的。使用var_dump(变量)可以查看此变量的数据类型。
l 在php中”.”相当于Java中的“+”,可用于表示连接字符串。
l 数据类型(8类):整型,浮点型,字符型,布尔型;复合类型:数组(array),对象(object);特殊类型:null,资源类型。
l php支持无符号类型。
l 在php中,一个整数,一般占用四个字节(与平台相关),一个字节占用8bit。可以使用PHP_INT_SIZE显示这台机器上int类型占用的字节数。PHP_INT_MAX可表示在这台机器上int类型能够表示的最大值。
l 如果一个整数被赋给一个变量时,这个整数超出了这台机器的PHP_INT_MAX时,这个变量就会被解释成float类型的。
l Php中的break语句,在break后可以接一个整数,带的这个数字代表跳出的循环层数,这个数字不能差多实际的最高的循环层数。continue的用法也类似。
l goto语句,通过goto语句可以使程序跳转到某一个地方去执行。使用注意事项,在使用goto语句时有一定限制,只能在同一个文件和作用域中跳转,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。常见的用法是用来跳出循环或者switch,可以代替多层break。
eg:goto a;
echo ‘aa’;
a:
echo ‘bb’;
最终输出的是bb;
l php常量,用define()或者const来定义,不用理会变量的作用域而在任何地方定义和访问,一旦定义就不能被重定义或者取消定义,常量是标量(基本数据类型(string,integer,float,boolean))。
Eg:define(“NAME”,VALUE); 或者 const NAME=VALUE;
l Php中要引入文件使用 require ‘file.file’;
l 函数定义(如果无返回不要加void)
function 函数名(参数列表){
函数体;
}
l 数组,php中的数组是一组关键字和值的集合,只可以是任何一种类型。
创建数组的方式
1. $a[0]=”hello”, $a[1]=1, $a[2]=12.6, $a[3]=true;
2. $arr=array(1,”hello”,true);
3. $arr[“logo”]=”北京”;,$arr[false]=”Tom”,$arr[true]=18,$arr[null]=”空”,$arr[12.3]=56; $arr[1]的值是18,$arr[0]的值是“Tom“,$arr[“”]的值是“空”,$arr[12]和$arr[12.3]的值都是56.
4. $arr=arry(5=>”logo”,234); $arr[5]的值是“logo” $arr[6]的值是234。
l Php 面向对象
1. 访问成员属性
a) Public 对象名->属性名 eg: $p1=new P; $p1->name=”小明”;
2. 如果一个文件开始专门用来定义类(而不对类进行操作),则这个文件名应该与里面的这个类的名字同名以大写字母开头。
3. <?php
class Person{
public $name;
}
$a= new Person();
$a->name=”小明”;
$b=$a;
$b->name=”小红”;
echo “$a->name是”.$a->name.” ”;
echo “$b->name是”.$b->name.” ”;
?>
a) $a 和 $b两个指向的都是同一个空间,修改任意一个属性则另外一个相应的属性也随之修改。结果会输出: $a->name是小红 $b->name是小红
注意区别于下面这段代码:
$a=78;
$b=$a;
$b=$b+8;
eho “$a 是”$a.” $b是”.$b;
输出:$a 是78 $b是86
b) 若
4. 构造方法
b) 当同一个类中同时存在php4和php5所规范的两种构造方法,优先调用 __construct()。(这样做主要是为了兼容php4和php5,建议使用__construct())
5. 在类中要操作本类的属性时,要使用this关键字。
6. 析构方法,php5引入了析构函数,这类似于C++。析构函数在到某个对象的所有引用都被删除或者当对象被显式销毁时执行
主要用于释放资源。
析构函数调用的顺序是,先创建的对象后被销毁。
析构函数被调用:
(1)当程序退出(服务器进程结束)时。
(2)当一个对象成为垃圾对象的时候,该对象的析构方法也会被调用。Ps:当一个对象没有任何引用的时候这个对象就成为了垃圾对象。
Eg:
执行结果是
7. Static关键字,静态变量(类变量)
a) 全局变量:在程序中任何地方都能够访问的变量,全局变量声明和赋值要分开。声明: global $a;或者 global $global_a;
b) 静态变量
当一个属性需要给多个对象共享的时候可以使用静态变量。
c) 静态方法
在编程中
1.静态方法不能操作非静态变量。
2.我们一般使用静态方法操作静态变量。
3.普通的成员方法技能操作静态变量也能操作非静态变量。
l Php面向对象编程的三大特性
继承、封装、多态。
1. 封装
访问修饰符:
public Protected private
方法之间可以幻想调用,但是需要使用$this引用。
2. 继承(extends)
a).Php中的一个类只能直接继承一个父类。
b).子类只能继承父类的public 和 protected 修饰的方法和属性。
c).在创建某个子类对象时,默认情况不会自动调用父类的构造方法。(这和java中的不同)
d).如果子类中需要访问其父类的方法(构造方法/成员方法,成员方法必须是以public或者protected修饰的才能访问)时,可以使用 父类::方法名 或者 parent::方法名 来完成。
e).方法的重写(方法的覆盖) (override)
i.子类的某个方法名称、参数列表都相同。
ii.在实现方法覆盖的时候,访问修饰符可以不一样,但是必需满足子类的访问范围不能小于父类的访问范围。
3. 多态
4. 重载(overload)
php不允许定义多个同名函数。
Php5不直接支持方法重载,可以通过魔术方法__call()来模拟重载。
l 抽象类
基本语法
抽象类抽象方法的使用注意事项
2. 如果一个类使用abstract来修饰,则该类就是抽象类。如果一个方法被abstract修饰,则该方法就是抽象方法(抽象方法不能有实现)
3. 抽象类可以没有抽象方法也可以有实现了的方法。
l 接口
2. 深入讨论接口
什么情况下可以考虑使用借口
1. 定规范
2. 定规范,让别的程序员实现。
3. 当多个类,他们之间是平级的关系,这些类都会实现某个功能,只是实现的方式不一样。
1. 细节
a) 借口不能被实例化
b) 接口中的方法都不能被实例化
c) 一个类可以实现多个接口
d) 接口中的属性必须是常量,而且是public类型的。
Eg:
e) 接口的方法必须是public的
f) 一个接口不能继承其他的类,但是可以继承(extends)其他接口。
l final关键字
1.如果我们希望一个类不被其他类继承,某一个方法不被子类改写(可能是出于安全性的考虑),则考虑使用final关键字来修饰这个类。
2.final不能修饰成员方法(变量)
l const关键字
2. 常量在定义的时候必须给初值。
3. 常量的默认是public的,其前面不能带修饰符。
4. 常量可以被子类继承
5. 一个常量是属于一个类的而不是一个对象的。
6. 常量的访问
类内部: 类名::常量名 或 self::常量名
类外部: 类名::常量名
面向对象的综合练习