PHP面对对象

1.类

类是属性和方法的集合,是面对对象编程的核心和基础。

2.对象

对象是类的实例化。

3.面对对象编程的三大特点:

封装性 继承性 多态性

4.成员方法

函数和成员方法的区别就是,函数数显的是某个独立的功能,成员方法是实现类的一个行为。

5.类的实例化

实例化是通过关键字new来声明一个对象,然后用 对象名->成员方法

<?php
class SportObject{
function beatBasketball($name,$height,$avoirdupois,$age,$sex){
if($height>180 and $avoirdupois<=100){
return $name."符合打篮球的要求!";
}
else{
return $name."不符合打篮球的要求!";
}
}
}
$sport=new SportObject();
echo $sport->beatBasketball('明日','185','80','20周岁','男');
?>

6.成员变量

访问成员变量和访问成员方法是一样的,只要把成员方法换成成员变量就行,格式为对象名->成员变量

<?php
class SportObkect{
public $name;
public $height;
public $avoirdupois;
public function bootFootBall($name,$height,$avoirdupois){
$this->name=$name;
$this->height=$height;
$this->avoirdupois=$avoirdupois;
if($this->height<185 and $this->avoirdupois<85){
return $this->name.",符合踢足球的要求";
}
else{
return $this->name.",不符合踢足球的要求";
}
}
}
$sport = new SportObject();
echo $sport->bootFootball('明日','185','85');
?>

7.类变量

<?php
class SportObject{
const BOOK_TYPE='计算机图书';
public $object_name;
function setObjectName($name){
$this->object_name=$name;
}
function getObjectName(){
return $this->object_name;
}
}
$c_book = new SportObject();
$c_book->setObjectName("PHP类");
echo SportObject::BOOK_TYPE."->";
echo $c_book->getObjectName();
?>

8.构造方法

构造方法的格式

void __construct([mixed args [,..]])

<?php
class SportObject{
public $name;
public $height;
public $avoirdupois;
public $age;
public $sex;
public function __construct($name,$height,$avoirdupois,$age,$sex){
$this->name=$name;
$this->height=$height;
$this->avoirdupois=$avoirdupois;
$this->age=$age;
$this->sex=$sex;
}
public function bootFootBall(){
if($this->height<185 and $this->avoirdupois<85){
return $this->name."符合踢足球的要求";
}
else{
return $this->name."不符合踢足球的要求";
}
}
}
$sport=new SportObject('明日','185','80','20','男');
echo $sport->bootFootBall();
?>

构造方法是初始化对象用的。


9.析构方法

析构方法是摧毁对象时用的

void __destruct(void)


10.继承

<?php
class SportObject{
public $name;
public $avoirdupois;
public $age;
public $sex;
public function __construct($name,$age,$avoirdupois,$sex){
$this->name=$name;
$this->avoirdupois=$avoirdupois;
$this->age=$age;
$this->sex=$sex;
}
function showMe(){
echo '这句话不会显示';
}
}
class BeatBasketBall extends SportObject{
public $height;
function __construct($name,$height){
$this->height=$height;
$this->name=$name;
}
function showMe(){
if($this->height>185){
return $this->name."符合打篮球的要求";
}
else{
return $this->name."不符合打篮球的要求";
}
}
}
class WeightLifting extends SportObject{
function showMe(){
if($this->avoirdupois<85){
return $this->name."符合举重要求";
}
else{
return $this->name."不符合举重要求";


}
}
}
$beatbasketball = new BeatBasketBall('科技','190');
$weightlifting = new WeightLifting('明日','185','80','20');
echo $beatbasketball->showMe()."<br>";
echo $weightlifting->showMe()."<br>";
?>

11.多态

多态存在两种形式:覆盖和重载

覆盖就是在子类中重写父类的方法

重载是类的多态的另一种实现


12.$this->和::的使用

<?php
class example{
function exam(){
if(isset($this)){
echo '$this 的值为'.get_class($this);
}
else{
echo '$this 为定义';
}
}
}
$class_name = new example();
$class_name->exam();
?>

解析:当类被实例化后,$this同时被实例化为本类对象,这时对$this使用get_class()函数,将返回本类的类名。

操作符::可以在没有声明任何实例的情况下访问类中的成员方法或成员变量

parent 可以调用父类中的成员

self可以调用当前类中的静态成员和常量

<?php
class Book{
const NAME = 'computer';
function __construct(){
echo '本月图书冠军为'.Book::NAME.'';
}
}
class i_book extends Book{
const NAME = 'foreign language';
function __construct(){
parent::__construct();
echo '本月图书类冠军为'.self::NAME.'';
}
}
$obj=new i_book();
?>

13.数据隐藏

public(公共成员)

private(私有成员):只能在所属类的内部被调用和修改,不可以在类外被访问

<?php
class Book{
private $name = 'computer';
public function setName($name){
$this->name=$name;
}
public function getName(){
return $this->name;
}
}
class LBook extends Book{


}
$ibook = new LBook();
echo '正确操作私有变量的方法:';
$ibook->setName("PHP5从入门到应用开发");
echo $ibook->getName();
echo '<br>直接操作私有变量的结果';
echo Book::$name;
?>

protected(保护成员)用protected修饰的类成员,可以阿紫本类和子类中被调用,其他地方则不可以。

<?php
class Book{
protected $name = 'computer';
}
class LBook extends Book{
public function showMe(){
echo '对于protected修饰的变量,在子类中是可以直接调用的 如: $name='.$this->name;
}
}
$ibook = new LBook();
$ibook->showMe();
echo '<p>但在其他的地方是不可以调用的,否则:';
$ibook->name='history';
?>

14.静态变量(方法)

可以给变量加上static关键字来直接调用 格式为关键字::静态成员

关键字可以是

self 在类内部调用静态成员时所使用

静态成员所在的类明,在类外调用类内部成员时所使用

在静态方法中,只能调用静态变量,而不能调用普通变量

<?php
class Book{
static $num=0;
public function showMe(){
echo '您是第'.self::$num.'位访客';
self::$num++;
}
}
$book1=new Book();
$book1->showMe();
echo "<br>";
$book2=new Book();
$book2->showMe();
echo "<br>";
echo '您是第'.Book::$num.'位访客';
?>

15.final关键字

被final修饰的类不可以被继承,也不能再有子类


16.抽象类

抽象类是一种不能被实例化的类,只能作为其他类的父类来使用,用关键字abstract来声明

<?php
abstract class CommodityObject{
abstract function service($getName,$price,$num);
}
class MyBook extends CommodityObject{
function service($getName,$price,$num){
echo '您购买的商品是'.$getname.'该商品的价格是:'.$price.'元';
echo '您购买的数量是'.$num.'本';
echo '如发现缺页,损坏请在3日内更换';
}
}
class MyComputer extends CommodityObject{
function service($getName,$price,$num){
echo '您购买的商品是'.$getname.'该商品的价格是:'.$price.'元';
echo '您购买的数量是'.$num.'本';
echo '如发现缺页,损坏请在3日内更换';
}
}
$book = new MyBook();
$computer = new MyComputer();
$book->service('《PHP从入门到精通》',85,3);
echo '<p>';
$computer->service("xx笔记本",8500,1);
?>


17.接口的使用

接口用关键字interface来声明

<?php
interface MPopedom{
function popedom();
}
interface MPurview{
function purview();
}
class Member implements MPurview{
function purview(){
echo '会员拥有的权限';
}
}
class Manager implements MPurview,MPopedom{
function purview(){
echo '管理员拥有会员的全部权限';
}
function popedom(){
echo '管理员还有会员没有的权限';
}
}
$member = new Member();
$manager = new Manager();
$member->purview();
echo '<p>';
$manager->purview();
$manager->popedom();
?>


18.克隆对象

<?php
class SportObject{
private $object_type = 'book';
public function setType($type){
$this->object_type=$type;
}
public function getType(){
return $this->object_type;
}
}
$book1=new SportObject();
$book2=$book1;
$book2->setType('computer');
echo '对象$book1的值为:'.$book1->getType();
?>


19.对象类型检测

instanceof用来检测对象属于哪个类

<?php
class SportObject{}
class MyBook extends SportObject{
private $type;
}
$cBook = new MyBook();
if($cBook instanceof MyBook){
echo '对象$cBook属于MyBook类<br>';
}
if($cBook instanceof SportObject){
echo '对象$Book 属于 SportObject类<br>';
}
?>


20.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值