PHP中的面向对象

面向对象编程OOP,

一切已对象为核心,关注的是项目中需要哪些对象,每个对象上能实现哪些功能;
概念:
类:拥有相同属性和相同行为对象的统称;如:学生,电脑,---学生属性(姓名,年龄,住址),只能知道有哪些属性,不知道具体的值;
对象:属性以及操作属性行为的集合体;可以知道具体的属性值,

面向过程

主要实现功能

声明类

1.定义类:

class 类名{
      属性
      方法
}

2.创建对象
$obj=new Rect();

class Rect{
//申明静态属性
    var $width=0;
    var $height=0;
//动态属性,行为即方法
function getLen(){
    //$this 是指当前对象的属性,对象与属性连接方式:->,$this->width,获取当前对象的width属性
    return ($this->width+$this->height)*2;
}
    
}
//创建对象
$rect1=new Rect();//创建具体的对象
$rect1->width=40;//设置该对象的具体属性
$rect1->height=40;
$len=$rect1->getLen();//调用对象上的方法,获取该对象的周长;
echo 'rect1的 长:'.$rect1->width.' 高:'.$rect1->height.' 周长:'.$len;

每个类都有__toString(){}将对象转换为字符串,,return 回去的是转换结果

将字符串转为数组:explode(分隔符,字符串)
将数组转为字符串 :join(连接符,数组)

构造方法

__construct([形参列表]){}
//构造方法--是在创建对象是自动调用该方法,主要用于初始化对象

析构方法

__destruct([形参列表]){}
//当对象销毁时自动执行,用于释放资源和垃圾对象(垃圾对象是一个对象没有相应的引用名称,或对象销毁时)

class Person{
    var $name;
    var $pwd;
    var $telephone;
    function __construct($name,$password,$tel){
        //构造方法--是在创建对象是自动调用该方法,主要用于初始化对象
        $this->name=$name;
        $this->psw=$password;
        $this->telephone=$tel;
        $this->introduce();//创建后自动调用函数
    }

    function introduce(){
        echo '我的账号:'.$this->name.'我的密码'.$this->psw;
    }
    function __destruct(){
        echo '<br/>';
        echo $this->name.'此变量已经销毁<hr/>';
    }
}

$jack=new Person('jack','aaaa','123234');//jack我的密码aaaa
var_dump($jack);
//unset($jack);//手动销毁的话,立马执行;
$jam=new Person('jam','bbbb','2222');//jam我的密码bbbb
//没有手动销毁时,执行顺序是,先jam,后jack;先进后出原则;

创建一个点类(计算任意两点间的距离公式是:[A(x1,y1)、B(x2,y2)]

//计算这两点间的距离:((x1-x2)2+(y1-y2)2)开根) pow(x,y),sqrt(144)

class point{
    var $x;
    var $y;
    function __construct($x,$y){
        $this->x=$x;
        $this->y=$y;
    }
    function dis($point){
        return sqrt(pow($point->x-$this->x,2)+pow($point->y-$this->y,2));
    }
}

$point2=new point(10,50);
$point1=new point(10,90);
echo $point1->dis($point2);//40

对象的特征->封装

将安全性高的信息隐藏起来;通过访问的控制符来实现
访问控制符:private ,protected,public 用于修饰方法及属性,主要控制他们的可见性,放在属性,方法之前
private :私有的,只有本类才能使用;
protected:受保护的,只有本类中子类才能使用;
public :公有的,本类,子类,类外部可以使用;

var 关键词只能修饰属性,不能修饰方法,同public;

魔术方法__set(),__get()__call(){}

  • __set($name,$value)---当对象设置不存在的属性时或者没有权限的属性时自动调用此方法,需要两个形参分别用于接收属性名以及属性值
  • __get($name)---当对象访问不存在的属性时或者没有权限的属性时自动调用此方法;
  • __call($name,$arguments)**
  • __call($name,$arguments)---当对象调用不存在的方法或者无权限访问的方法时自动调用该方法,$name---方法名,$arguments接收的是方法传递的参数,是数组**
  • _callStaric($name,$arguments)当调用不存在的静态方法时调用**

property_exists(CLASS,$name) 检测某类中是定义指定属性;
class_exists(类名) 检测类是否存在
is_file(文件路径)检测文件是否存在
method_exists(类名|对象,方法名),判断方法名是否存在
_CLASS_获取当前类名
_METHOD_获取当前方法名//类,对象里面叫方法,外面是函数
_FUNCTION_获取当前函数名
trigger_error()

class Img{
    private $src = '';
    private $width;
    private $height;
    public function __construct($src,$w,$h){
        $this->checkSrc($src);
        $this->checkNum($w);
        $this->checkNum($h);
        $this->src = $src;
        $this->width = $w;
        $this->height = $h;
    }

    public function __set($name, $value){
        if(property_exists(__CLASS__,$name)){
            //只有定义了的属性才能设置
            $fn = '';
            if($name=='src'){
                $fn = 'checkSrc';
            }else if(array_search($name,['width','height'])!==false){
                $fn = 'checkNum';
            }
            $this->$fn($value);
            $this->$name = $value;
        }
    }

    public function __get($name){
        if(property_exists(__CLASS__,$name)){
            return $this->$name;
        }
    }

    private function checkSrc($path){
        if(!is_file($path)){
            trigger_error($path.'文件不存在!',E_USER_ERROR);
        }
    }

    private function checkNum($num){
        if(!is_int($num)){
            trigger_error($num.'不是有效的整型!',E_USER_ERROR);
        }
    }
}
$img = new Img('upload/24.jpg',100,200);
$img->src = 'upload/20.jpg';
$img->width = 200;
echo $img->width.'<br />';
echo $img->src.'<br />';
echo $img->path.'<br />';
$img->height = 300;
var_dump($img);
class Shape{
//    var $width;   //var关键词只能修饰属性,相当于public,推荐使用public
//    public $height;
//    public $width;
//    public $height;
//***要求width与height只能是整型,需要将此属性变成非公有的,避免在类外部随意设置值而不能相应的处理
    private $width;
    private $height;

    public function __construct($w,$h){
//        echo __CLASS__;  //当前类名
        $this->isInt($w);
        $this->isInt($h);
        $this->width = $w;
        $this->height = $h;
    }

    public function setValue($key,$value){
        //设置宽与高
        if(property_exists(__CLASS__,$key)){
            //property_exists(类名,属性名)----检测类是否定义了指定的属性名
            $this->isInt($value);
            $this->$key = $value;
        }
    }

    public function getArea(){
        return $this->width*$this->height;
    }


    public function justType(){
        return $this->width==$this->height?'正方形':'长方形';
    }

    private function isInt($value){
        if(!is_int($value)){
            trigger_error($value.'不是整型,请重新传值',E_USER_ERROR);  //trigger_error(msg)----触发一个错误信息
        }
    }
}

$s1 = new Shape(30,20);
echo $s1->getArea().'<br />';
$s1->setValue('width',50);
$s1->setValue('height',10);
echo $s1->getArea().'<br />';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,800评论 6 13
  • PHP面向对象的语法,面向对象只可意会不可言传,万物皆对象: 定义类 创建类对象(实例化) 使用对象 对象创建方式...
    kangyiii阅读 431评论 0 3
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,670评论 0 9
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,099评论 0 2
  • 文/彧渊玖儿 那张泛黄的横格纸 那排密密麻麻的繁体字 当时的你, 是否也像现在的我 这般感动、惊喜 几十载风风雨雨...
    辞不尽意阅读 663评论 2 4