Web安全学习_PHP学习_类

一、类

类的定义

变量名;  //$this表示自身的对象
	}
//创建类并调用类成员及方法
	$对象名=new 类名;
	$对象名->成员变量名=值;  //调用成员变量并赋值
	$对象名->方法名();  //调用成员方法
?>

构造函数:用于对成员变量进行初始化

name=$a;
			$this->height=$b;
		}
	}
	$Bob=new Person("Bob",180);  //定义了一个Bob对象并传入Bob和180的参数
	echo $Bob->name;  //此时输出名字"Bob"
	echo $Bob->height;  //输出身高为180
?>

析构函数:用于对象调用完函数后,释放空间。函数名为__destruct

继承

  1. 用于继承已定义好的类,PHP不支持多继承。使用关键字extends只能继承父类的public、protected成员变量和方法,private成员变量和方法不能继承
age;
		}
		function showprivate(){
			echo $this->salary;
		}
		function showprotectedhanshu(){
			$this->showAge();
		}
		function showprivatehanshu(){
			$this->showSalary();
		}
	}
	//创建一个子类的对象
	$Bob=new Coder();
	echo $Bob->name;//成功输出说明继承了父类的public成员属性
	//通过子类的输出protected变量方法测试是否继承父类的protected成员属性
	echo $Bob->showprotected(); //成功输出,说明继承了protected成员属性
	echo $Bob->showprivate();//报错,说明未继承父类的private属性
//---------测试继承父类的方法----------
	echo $Bob->showName();//成功输出说明继承了父类的public方法
	echo $Bob->showprotectedhanshu();//成功输出说明继承了父类的protected方法
	echo $Bob->showprivatehanshu();//报错,说明未继承父类private方法
?>
  1. 子类若定义了构造方法则不会调用父类的构造方法,若子类没有定义构造方法则会调用父类的构造方法(见上例)
  2. 子类中若需要调用父类中的方法,可以通过:parent::方法名();或父类名::方法名();调用。

方法重写:当继承以后可以对父类的方法进行重写,此时将覆盖之前的内容。子类重写时,访问权限不能小于父类方法的访问权限。如父类为public,子类不能为protected

name;
		}
	}
//定义Person2类,继承Person类
	class Person2 extends Person{
		var $weight;
		var $hobby;
//对父类的方法进行重写
		function print_name(){
			echo $this->weight;
		}
	}
//创建一个Person2类的对象
	$Alice=new Person2;
	$Alice->name="Alice";
	$Alice->weight="65kg";
	echo $Alice->name;
	echo $Alice->weight;
	$Alice->print_name();  //此时仅会输出weight
?>

类的成员变量的三种访问权限

  • public(公有):可以在任何地方访问。 使用var关键字定义的变量为公有访问属性
  • protected(保护):可以被其自身、其父类、其子类访问。
  • private(私有):只能被其定义的所在类访问

访问private和protected成员需要通过类内public函数访问

n1=$N1;  //通过公有方法对n1和n2赋值
			$this->n2=$N2;
		}
		function showInfo(){
			echo $this->n1;  //输出n1和n2的值
			echo $this->n2;
		}
	}
	$Bob=new A();
	//若加入此代码会报错$Bob->n1=100;
	//Cannot access private property
	$Bob->setN1(10,20);
	$Bob->showInfo();
?>

static变量
静态变量与全局变量原理相似,但静态变量只能通过类来访问,全局变量破坏了封装性
定义:

addPeople(); 
	$Alice=new People;  //增加一个对象Alice
	$Alice->addPeople();
	echo People::$num;  //类外访问静态变量,访问静态变量的值
?>

**静态方法(类方法)**只能操作静态变量,不能操作非静态变量
普通的方法可以操作静态变量也可以操作非静态变量
定义


final关键字
如果一个类被声明为final类则此类不能被继承,若一个类中的成员方法被声明final则此类不能被重写,但可以被继承,不能修饰成员属性

name;
		}
		final function print_Age(){
			echo $this->age;
		}
	}
//定义子类People2继承父类People1,此时不能对父类中的print_Age方法进行重写,如重写则报错
	class People2 extends People1{
		public $height;
		function print_height(){
			echo $this->height;
		}
	}
	$Bob=new People2;
	$Bob->age=19;
	$Bob->name="Bob";
	$Bob->height=187;
	$Bob->print_Name();
	$Bob->print_Age();
	$Bob->print_height();
?>

抽象类

  • 将一个中的方法不进行实例化,供其他类继承。
  • 只要类中有一个为抽象方法则此类就必须声明为抽象类
  • 抽象类被继承后,子类中必须实现抽象类中的所有抽象方法

接口

  • 接口不能实例化 一个类可以实现多个接口用逗号隔开
  • 接口只声明方法不实现 类实现某个接口必须将接口内的方法全部实现
  • 接口中不能定义变量,可以定义常量 一个
  • 接口可以继承多个接口,逗号隔开

const常量

  • 定义时必须赋初值。
  • 常量名为大写。
  • 常量一旦定义就不能修改。
  • 常量具有public的属性但不能在定义常量之前加访问权限的关键字。
  • 可以被子类继承。
    类内访问常量:类名::常量名 或 self::常量名
    类外访问常量:类名::常量名

你可能感兴趣的:(PHP)