php面向对象

一路走来也见识了几种语言的面向对象,最古怪的是javascript的,但是发现都没有深入,现在想系统的记录下php面向对象的学习


php面向对象_第1张图片
image.png

类名的每个单词首字母大写

类可以通过extends继承另一个类,不支持多继承,可以在子类中重写父类中的属性和方法,方法重写参数必须保持一致

可以通过 对象名->属性或$this->属性来调用非静态属性
对象名::属性或$self::属性来调用静态属性

food;
    }
}
$doctor = new person();
$doctor->eat();
?>

php是单继承


static  在两个对象之间共享相同的属性,修改一个,另一个也相应修改
public static $name = 'weiwei';
在类中使用静态成员,使用self::静态成员来调用,在类的外部使用静态成员,使用类名::静态成员来调用,使用self可以访问类自身的成员方法,访问常量可以不加$符号
使用parent关键字可以访问父类的静态成员,还可以访问父类中被子类重写的方法
静态方法只能访问静态属性
不能用$this->访问静态属性,方法
静态方法内部不能使用$this

(1)随机给定长度给定类型字符串类,类型有数字,字母,字母加数字
class RandStr{
    public $length;
    public $para_type;

    public function __construct($length=7,$para_type=2){
        $this->length = $length;
        $this->para_type = $para_type;
    }
    public function generateRandStr(){
        switch ($this->para_type) {
            case 1:
                $string = join('',array_rand(array_flip(range(0,9)),$this->length));
                echo $string;
                break;
            case 2;
                $string = join('',array_rand(array_flip(range('a','z')),$this->length));
                echo $string;
                break;
            default:
                $string = join('',array_rand(array_flip(array_merge(range(0,9),range('a','z'))),$this->length));
                echo $string;
                break;
        }
    }
}

$weidapao = new RandStr(5,3);
$weidapao->generateRandStr();
(2)parent的使用
class house{
    private $wallcolor;
    private $window_num;

    public function __construct($wallcolor = 'white',$window_num = 2){
        $this->wallcolor = $wallcolor;
        $this->window_num = $window_num;
    }
    public function house_info(){
        $info = "房屋的基本信息有:"."墙壁颜色:".$this->wallcolor."
窗户数量:".$this->window_num; return $info; } } class library extends house{ private $rect_size; public function __construct($rect_size = 400){ parent::__construct(); $this->rect_size = $rect_size; } public function library_info(){ $info = parent::house_info(); echo $info."占地面积为:".$this->rect_size; } } //$myhouse = new house('blue',3); //$myhouse->house_info(); $library = new library(500); $library->library_info(); //继承的方法可以和子类的方法名不同
(3)abstract抽象类
  • 当该类至少有一个抽象方法,该类为抽象类
  • 抽象类不能被实例化,只是定义了调用方式,没有具体实现
  • 子类继承的时候必须实现所有的抽象方法
  • 子类在实现父类方法的时候,方法可见性可以与父类相同或者宽松
  • 为子类提供一种规范

(图形面积周长的计算)

width = $width;
        $this->height = $height;
    }
    abstract protected function getArea();
    abstract protected function getPrimeter();
    //抽象方法不加大括号{},抽象方法后要加分号
}

class Rectangle extends Shape{
    public function getArea(){
        echo "矩形面积为:".($this->width * $this->height);
    }
    public function getPrimeter(){
        echo "矩形周长为:".(($this->width) * 2 + ($this->height) * 2)."
"; } //涉及到计算部分的字符串连接,要对计算部分加括号 } class Circle extends Shape{ private $radius; public function __construct($radius){ $this->radius = $radius; } //因为涉及到传参数量不同,因此重写构造函数 public function getArea(){ echo "圆形面积为:".(3.14 * $this->radius * $this->radius)."
"; } public function getPrimeter(){ echo "圆形周长为:".(3.14 * $this->radius *2)."
"; } } $playground = new Rectangle(20,30); $playground->getArea(); $playground->getPrimeter(); $circle = new Circle(5); $circle->getArea(); $circle->getPrimeter();

抽象类只能单继承,接口可以多继承,也可以多实现,接口里的成员字段必须是常量,而抽象类可以共享非抽象方法,也可以有其他非抽象属性字段

(4)interface接口
";
    }
    public function his_score(){
        echo "我的历史得了88分";
    }
}

$weidapao = new Student;

$weidapao->eng_score();
$weidapao->his_score();
  • 类可以实现多个接口

  • 接口继承多个接口,类必须实现所有实现接口的方法
";
    }
    public function far_info(){
        echo "我是伟大炮的爸爸
"; } public function mom_info(){ echo "我是伟大炮的妈妈
"; } } $weiwei = new Son; //如果不传参,可以不加括号 $weiwei->all_info(); $weiwei->far_info(); $weiwei->mom_info();

(5)static静态
炸弹的数量为:".self::$boom."
发动机的数量为:".self::$engine; //使用self::属性名 属性名需要加$ } public function no_static_plane_info(){ echo "
非静态方法调用静态属性,发动机的数量为:".self::$engine; } } $f4 = new Plane; echo "类外调用,炸弹的数量为:".Plane::$boom; $f4->plane_info(); $f4->no_static_plane_info(); //非静态方法可以调用静态属性

(6)多态
";
    }
    public function sport_way(){
        echo "打篮球是五人对五人,一个球
"; } } class FootBall implements Sports{ public function sport_type(){ echo "运动类型是踢足球
"; } public function sport_way(){ echo "踢足球是十一人对十一人,一个球,两个守门员
"; } } class Person{ public function whichSport($type,$way){ $type."
".$way; } } $basketball = new BasketBall; $football = new FootBall; $weidapao = new Person; //根据传入对象不同,不同对象调用相同方法产生不同的结果 $weidapao->whichSport($basketball->sport_type(),$football->sport_way());

你可能感兴趣的:(php面向对象)