//类的声明和实例的生成、
//定义类
class guests{ //用关键字class声明一个类,类名为guests,大括号内为类的属性和方法
private $name;
private $gender;//用private 声明类的自有属性,在类的的外部不能访问,只能在内部访问
function setname($name){ //类的方法,可以对两个属性进行操作,
$this->name = $name; //$this 是对类本身的引用,”->“连接类的属性,
}
//定义函数
function getname(){
return $this->name;
}
function setgender ($gender){
$this ->gender=$gender;
}
function getgender(){
return $this->gender;
}
};
$xiaoming =new guests; //生成实例 ---用new 关键字生成一个对象,对象名是小明,对象小明就拥有了类guests的所有属性和方法,然后通过对象的方法来对对象的属性进行操作
$xiaoming -> setname("王小明");//通过setname (name)给实例xiaoming的属性name赋值”王小明“
$xiaoming ->setgender("男");//同上
$lili->new guests;
$lili->setname("李莉莉");
$lili->setgender("女");
echo $xiaoming ->getname()."/t".$xiaoming->getgender()."
"; //通过getgender() ,getname()返回两个实例的属性name,gender并打印出来
echo $lili-> getname()."/t".$lili-> getgender();
?>
//构造方法的使用和技巧
class guests{ //定义类guests
private $name ;
private $gender;
function __construct ($name,$gender){ //定义函数function __construct
$this->name = $name;
$this-> gender =$gender;
}
function getname(){ //定义函数getname
return $this -> name;
}
function getgender(){ //定义函数getdender
return $this ->gender;
}
};
$xiaoming = new guests ("赵大勇","男");
$lili =new guests("方芳芳","女");
echo $xiaoming ->getname()."\t".$xiaoming->getgender()."
";
echo $lili ->getname()."\t".$lili->getgender();
?>
//注:构造方法不能返回(return)值的
//访问方法
(accessor)
class guests{
public $property;
function _set($propName,$propValue){ //set方法的格式 --propName为”属性名“,propValue为”属性值“
$this ->$propName =$propValue; //对象的名称
}
function _get($propName){ //get方法的格式
return $this->$propValue; //返回对象的值
}
};
$xiaoshuai =new guests; //声明一个对象,对象名为小帅 ,之下为对象属性
$xiaoshuai ->name ="刘小帅";
$xiaoshuai ->gender ="男性";
$dingdang =new guests; //同上
$dingdang ->name ="丁叮当";
$dingdang ->gender ="女性";
$dingdang ->age ="28";
echo $xiaoshuai ->name."是".$xiaoshuai->gender."
"; //输出对象得属性值
echo $dingdang ->name."是一位".$dingdang ->age."岁".$dingdang ->gender."
"; //同上
?>
//类的继承
class Vegetables{
var $tomato ="西红柿"; //定义变量
var $cucumber ="黄瓜";
}
class VegetablesType extends Vegetables{ //class 子类名 extends 父类名{ 子咧变量 子类成员方法 }
var $potato ="马铃薯"; // 定义子类变量
var $radish ="萝卜";
}
$vegetables =new VegetablesType(); //实例化对象
echo "蔬菜包括:".$vegetables->tomato.",".$vegetables->t cucumber.",".$vegetables->potato.",".$vegetables->radish; //输出对象属性
?>
//高级特性
//静态属性和方法
class Gushi{ //声明类
public static $my_static ='洛阳亲友如相问,一片冰心在玉壶。
'; //声明静态变量
public function staticValue(){ //类的方法
return self::$my_static;
}
}
print Gushi::$my_static;//调用静态属性
$gushi = new Gushi(); //声明一个对象
print $gushi->staticValue();//调用类的方法
?>
//final类和方法不能被继承
class Math { //声明类,类名为math
//计算两数值的和
public final function Sum($a,$b){ //声明类的方法 且不能被继承
return $a+$b; //返回a+b
}
}
class M extends Math { //子类M继承父类Math
public function Sum($a,$b){ //重写Sum(子类方法)方法
echo '这里先测试一下'; //方法执行内容
}
}
$math =new M(); //声明对象?
echo $math->Sum(10,20); //输出math (子类的方法)下的方法sum
?>
//final 类不能被继承(final关键爱你次可以终止类的继承,final类不能有子类,final方法不能被覆盖)
final class Poth{ //声明类且不能被继承
public $aa =9.99;
//声明变量
}
$poth =new Poth(); //声明一个实例对象
echo $poth; //输出poth
class M extends Poth{//声明M类,它继承自Poth类,但执行时会出错,final类不能被继承
}
?>
//抽象类和接口
//抽象类
格式为:
abstract class 抽象类名称{
//抽象类的成员变量列表
abstract function 成员方法1(参数); //抽象类的成员方法
abstract function 成员方法2(参数); //抽象类的成员方法
}
abstract class MyObject { //声明一个抽象类
abstract function service ($getName,$price,$num); //抽象类的成员方法
}
class MyBook extends MyObject { //继承父类
function service ($getName,$price,$num){ //抽象子类的成员方法
echo '够买的商品是'.$getName.'商品的价格是:'.$price.'元';
echo '您够买的数量为:'.$num.'本。';
}
}
class MyComputer extends MyObject{ //继承父类
function service ($getName,$price,$num){ //子类的方法
echo '您购买的商品是'.$getName.',该商品的价格是:'.$price.'元';
echo '您购买的数量为:'.$num.'本';
}
}
$book =new MyBook();
$computer =new MyComputer();
$book->service('《php7从入门到精通',59,15); //输出service方法
echo "
";
$computer ->service('Mysqk5.7从零开始学',65,10);//输出service方法
?>
//接口
语法为:
interface 接口名称{
//常量成员 ---接口中成员只能是常量
//抽象方法 - ---成员方法必须是抽象方法
}
实现接口的使用语法:
class 接口 implement 接口名称 {}
注:实现接口的类必须实现接口中声明的所有方法,除非这个类被声明为抽象类
interface Maxmin{ //声明接口类
//这两个方法必须在子类中继承,修饰符必须为public
public function getMax();
public function getMin();
}
class msm implements Maxmin{ //子类继承父类,声明变量
private $aa =33;
private $bb =66;
public function getMin(){//具体实现接口声明的方法
return $this->bb;
}
public function getMin(){
return $this->aa;
}
//这里还可以有自己的方法
public function getOther(){
return '这里是自己的方法';
}
}
//面向对象的多态性
abstract class Vegetables{ //定义抽象类Vegetables
abstract function go_Vegetables(); //定义抽象方法go_Vegetables
}
class Vegetables_potato extends Vegetables{ //马玲薯类继承蔬菜类
public function go_Vegetables(){ //重写抽象方法
echo '我们开始种植马铃薯'; //输出信息
}
}
class Vegetables_radish extends Vegetables{ //萝卜继承蔬菜类
public function go_Vegetables(){ //重写抽象方法
echo '我们开始种植萝卜';
}
}
function change($obj){ //自定义方法根据对象调用不同的方法
if ($obj instanceof Vegetables) {
$obj ->go_Vegetables();
}else{
echo '传入的参数不是一个对象'; //输出信息
}
echo '实例化Vegetables_potato:';
change (new Vegetables_potato()); //实例化Vegetables_potato
echo "
";
echo '实例化Vegetables_radish:';
change (new Vegetables_radish()); //实例化Vegetables_radish
?>
$msm =new msm(); //输出子类成员方法
echo $msm->getMax();
echo '
';
echo $msm ->getMin();
echo '
';
echo $msm ->getOther();
?>
//通过接口实现多态
interface Vegetables { //定义接口Vegetables
public function go_Vegetables(); //定义接口方法
}
class Vegetables_potato implements Vegetables { //Vegetables_potato子类继承父类Vegetables接口
public function go_Vegetables(){ //定义go_Vegetables方法
echo "我们开始种植马铃薯"; //输出信息
}
}
class Vegetables_radish implements Vegetables{ //Vegetables_radish 实现Vegetables接口
public function go_Vegetables (){ //定义go_Vegetables方法
echo '我们开始种植萝卜'; //输出信息
}
}
function change ($obj){ //自定义方法根据对象调用不同的方法
if($obj instanceof Vegetables){
$obj ->go_Vegetables();
}else{
echo '传入的参数不是一个对象'; //输出信息
}
}
echo '实例化Vegetables_potato:';
change (new Vegetaables_radish()); //实例化 Vegetaables_radish
?>