日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习oop知识之OOP的封装

發(fā)布時間:2024/4/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习oop知识之OOP的封装 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)習(xí)要點:

1、 OOP的封裝

2、 OOP的繼承

3、 OOP的多態(tài)

?

面向?qū)ο蟮娜齻€主要特性是封裝、繼承和多態(tài)。

?

一、OOP的封裝

隱藏對象的字段和實現(xiàn)細(xì)節(jié),僅對外公開接口,控制在程序中字段的讀和修改的訪問級別;將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成 一個有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。

?

字段的作用域 1.public 公共的 (類外可以訪問) 2.private 私有的 (類內(nèi)可以訪問) 3.protected 受保護(hù)的 (類內(nèi)和子類可以訪問,類外不可訪問) 其實也是私有的,權(quán)限不一樣而已

?

創(chuàng)建使用了私有的字段,這樣外部就無法訪問了

?

?

1、類內(nèi)和類外的概念

【參看demo1.php】

<meta charset="utf-8">

<?php

//創(chuàng)建一個電腦類

class Computer{

?

//什么叫做類內(nèi),就是創(chuàng)建類的兩個花括號內(nèi)的范圍叫做類內(nèi),其他地方則叫做類外;

//public是字段的公有化,這個字段類外即可訪問,賦值和取值;

public $_name;

}

?

$computer = new Computer(); //這就是類外;

$computer->_name = 'dell';

echo $computer->_name;

?>

?

?

2、類外無法訪問類內(nèi)私有字段

【參看demo2.php】

<?php

class Computer{ //大括號里面是類內(nèi);

//private是私有化,即對字段進(jìn)行封裝的操作,類外無法訪問,取值和賦值都不能操作;

private $_name = '聯(lián)想';

}

?

$computer = new Computer();

echo $computer->_name;

?>

?

?

?

?

3、類外如何訪問類內(nèi)私有字段——通過類內(nèi)公有方法

【參看demo3.php】

<meta charset="utf-8">

<?php

class Computer{

private $_name = '聯(lián)想';

//這個時候我采用一個公共對外的方法來訪問私有字段

//因為私有字段只能在類內(nèi)訪問,而對外的公共方法是類內(nèi)的。

//而且公共方式又是公共的,所以類外又可以訪問。

public function _run(){

//字段在類內(nèi)調(diào)用的時候必須是類->字段,而$_name只是普通變量而已

//字段在類外調(diào)用的方法是對象->字段,而類內(nèi)就必須使用Computer->_name

//但是在本類中可以用一個關(guān)鍵字來代替Computer,那就是$this

echo $this->_name;

}

}

?

$computer = new Computer();

$computer->_run();

?>

?

4、類外對類內(nèi)賦值和取值——通過設(shè)置公有賦值方法和公有取值方法

【參看demo4.php】

<meta charset="utf-8">

<?php

class Computer{

private $_name;

private $_model;

private $_cpu;

private $_keyboard;

private $_show;

private $_zb;

?

//必須寫一個對內(nèi)的入口,對私有字段進(jìn)行賦值

public function setName($_name){ //public換成private就會報錯

//通常約定俗成,字段是什么名字,你就取什么名字;

//這里的$_name只是一個變量而已,參數(shù)而已;

//$this->_name才是類的字段;

$this->_name = $_name;

}

?

//必須寫個對外的入口,才可以取到;

public function getName(){

return $this->_name;

}

?

}

?

$computer = new Computer();

$computer->setName('dell');

?

echo $computer->getName();

?>

?

?

?

?

?

?

?

5、設(shè)置攔截器__set()和__get()實現(xiàn)類外對類內(nèi)不同字段的賦值和取值

擴(kuò)展思考:如果類中有很多個字段需要賦值和取值,是不是需要有很多方法來對其進(jìn)行賦

值和取值呢?答案當(dāng)然不是;PHP內(nèi)置兩個攔截器(兩個方法)專門用于取值和賦值;

__set()和__get();(注意:是兩個下劃線)

?

?

【參看demo5.php】

<meta charset="utf-8">

<?php

class Computer{

private $_name;

private $_model;

private $_cpu;

//采用攔截器進(jìn)行賦值和取值

?

//當(dāng)類外的對象直接調(diào)用私有字段時,會跟著檢查是否有攔截器;如果沒有攔截器直接報錯;如果有攔截器就直接攔截下來;

//如果直接對$_name進(jìn)行賦值,那么__set()方法就會攔截住,就不會報錯了;

?

//賦值

public function __set($_key,$_value){//$_key屬性名,$_value屬性值;

//那么$_key = '_name' ,那么 $_value = '聯(lián)想'

//$this->_name = '聯(lián)想'

//那么$_key = '_cpu', 那么$_value = '四核'

//$this->_cpu = '四核'

//那么$_key = '_model', 那么$_value = 'i7'

//$this->_model = 'i7'

$this->$_key = $_value;

}

?

//取值方法1:

/*

public function getName(){

echo $this->_name;

echo $this->_model;

echo $this->_cpu;

}

*/

?

public function __get($_key){

return $this->$_key;

//如果$_key = '_name',那么$this->_name

//如果$_key = '_model',那么$this->_model

//如果$_key = '_cpu',那么$this->_cpu

}

?

//有個疑問?如果攔截器是私有private,那會出錯嗎

//不出錯!為什么都是私有的?類外還能訪問呢?下節(jié)課講解;

?

}

$computer = new Computer($_key); // new Computer($_key, $value);也可以如何分析??

$computer->_name = '聯(lián)想';

$computer->_cpu = '四核';

$computer->_model = 'i7';

?

?

echo $computer->_name;

echo $computer->_model;

echo $computer->_cpu;

?>

6、設(shè)置攔截器__set()和__get()私有的,類外可以實現(xiàn)對類內(nèi)字段的賦值和取值嗎

【參看demo6.php】

<meta charset="utf-8">

<?php

class Computer{

private $_name;

private $_model;

private $_cpu;

?

//__set()和__get()方法私有了,還是可以執(zhí)行,是因為目前程序的指針已經(jīng)在類內(nèi)了。而類內(nèi)可以執(zhí)行封裝的方法;

//類內(nèi)執(zhí)行私有方法,不會出現(xiàn)任何錯誤;

//只需要間接的攔截就可以了。攔截是在類內(nèi)執(zhí)行的;

?

//說白了,__set和__get是PHP內(nèi)置的方法,具有一定的特殊性;

private function __set($_key, $_value){

$this->$_key = $_value;

}

?

private function __get($_key){

return $this->$_key;

}

}

?

$computer = new Computer();

?

$computer->_name = '聯(lián)想';

$computer->_model = 'i7';

$computer->_cpu = '四核';

?

echo $computer->_name;

echo $computer->_model;

echo $computer->_cpu;

?>

?

?

?

7、類中常量設(shè)置及訪問

【參看demo7.php】

常量不是在堆區(qū)或棧區(qū),它是在一個數(shù)據(jù)區(qū)中;

<?php

class Computer{

const NAME = 'DELL';//const 定義常量;

}

?

//常量的輸出方法 類::常量 (兩個冒號)

echo Computer::NAME;

?

?

$computer = new Computer();

$computer ::NAME;

?>

?

?

?

8、普通類字段和類方法在數(shù)值累加情況

靜態(tài)類成員:有時候,可能需要創(chuàng)建供所有類實例共享的字段和方法,這些字段和方法與所有的類實例有關(guān),但不能由任何特定對象調(diào)用;

靜態(tài)類字段、靜態(tài)類方法;

?

【參看demo8.php】

?

<?php

class Computer{

public $_count = 0;

?

public function _add(){

$this->_count++; //$count = $count +1 $count++

}

}

?

//做一個累計的效果

$computer1 = new Computer();

$computer1->_add();

echo $computer1->_count;

$computer1->_add();

echo $computer1->_count;

$computer1->_add();

echo $computer1->_count;

?

echo "<br/>";

?

$computer2 = new Computer();

$computer2->_add();

echo $computer2->_count;

$computer2->_add();

echo $computer2->_count;

$computer2->_add();

echo $computer2->_count;

?>

?

?

9、靜態(tài)類字段訪問方法

上面$_count代碼如果設(shè)置成靜態(tài)字段會如何?

靜態(tài)字段是在一個特定的區(qū)域——數(shù)據(jù)區(qū);靜態(tài)區(qū)只有一個,它是共享的!!!

?

【參看demo9.php】

<?php

class Computer{

public static $_count=0;

?

public function _add(){

//如果是靜態(tài)成員字段,那么就應(yīng)該用self調(diào)用,而不是$this

self::$_count++; //注意:slef調(diào)用時候需要有$符號;$this調(diào)用的時候不需要有$符號

//普通方法必須實例化才能調(diào)用;

}

}

?

//echo Computer::$_count;

$computer1 = new Computer();

$computer1->_add();

$computer1->_add();

$computer1->_add();

echo Computer::$_count;

echo "<br/>";

?

$computer2 = new Computer();

$computer2->_add();

$computer2->_add();

$computer2->_add();

echo Computer::$_count;

?

?>

?

?

?

?

10、靜態(tài)類字段和靜態(tài)類方法的訪問方法

【參看demo10.php】

?

<?php

class Computer{

public static $_count = 0;

?

public static function _run(){

self::$_count++;

}

}

//普通方法需要實例化才能使用;

//而靜態(tài)方法不需要實例化直接能使用,不需要new;參看內(nèi)存說明圖;

Computer::_run();

Computer::_run();

Computer::_run();

Computer::_run();

echo Computer::$_count;

?

?>

?

?

?

11、instanceof關(guān)鍵字使用方法

instanceof關(guān)鍵字:可以確定一個對象是類的實例、類的子類還是實現(xiàn)了某個特定的接口,并進(jìn)行相應(yīng)的操作;

【參看demo11.php】

<?php

class Computer{

?

}

$computer = new Computer();

?

//左邊寫上對象的名字,右邊寫上類的名字

echo ($computer instanceof Computer);

//返回值是1表示真,1表示假;

?

?>

?

轉(zhuǎn)載于:https://www.cnblogs.com/hcrk/p/10788374.html

總結(jié)

以上是生活随笔為你收集整理的学习oop知识之OOP的封装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人a视频在线观看 | 欧美性猛交xxxx黑人交 | 91精品久久久久久久久久 | 欧美三级成人 | 黄色小视频在线免费看 | 亚洲一区二区电影网 | 中文字幕无线码一区 | 久久亚洲少妇 | 日韩一区二区视频在线 | 夜夜嗨av | 午夜在线视频免费观看 | 国产免费观看一区 | 日本亚洲一区二区三区 | 成人av在线一区二区 | 色一情一交一乱一区二区三区 | 国产亚洲欧美一区 | 午夜成人免费视频 | 亚洲精品1区2区 | 中国色老太hd | 杨幂一区二区三区免费看视频 | 嫩草在线视频 | 一区国产视频 | 成人mv在线观看 | 伊人动漫| 日本免费一二区 | 国产黑丝在线观看 | 欧美a天堂 | 夜夜嗨一区 | www.在线观看av | 日韩激情视频网站 | 奇米影视第四色7777 | 五月婷婷伊人网 | 97精品国产97久久久久久免费 | 久久久精品国产 | 天天干视频在线 | 免费91视频 | 国产123区在线观看 91国产一区二区 | 人人妻人人澡人人爽久久av | 丁香六月色| 免费av片 | 97夜色| 一级性毛片 | 国产每日更新 | 国产福利在线导航 | 国产无限制自拍 | 黄色不卡av | 最近中文字幕mv | 一级a性色生活片久久毛片 爱爱高潮视频 | 欧美日韩一区在线观看 | 奇米四色在线观看 | 婷婷亚洲视频 | 奶水旺盛的女人伦理 | 黄色网址网站 | 在线 日本 制服 中文 欧美 | 爽爽窝窝午夜精品一区二区 | 99热6这里只有精品 三级av在线免费观看 | 日日撸夜夜操 | 老熟妇一区二区三区啪啪 | 欧美人与动牲交xxxxbbbb | 久久人体视频 | 波多野结衣 在线 | 久久久成 | 亚洲2022国产成人精品无码区 | 骚虎免费视频 | 国产精品有限公司 | 亚洲国产精品久久精品怡红院 | 亚洲黄色第一页 | 日韩在线激情视频 | 蜜桃av一区二区 | 狠狠干干干 | 亚洲精品久久久久久久久久吃药 | 麻豆传媒一区 | 国产在线不卡 | 91av福利 | 天堂中文在线免费观看 | 深爱激情av | 久久久精品网站 | 天天操 夜夜操 | 91精品久久久久久久久中文字幕 | 精品国产午夜福利在线观看 | 久久亚洲综合国产精品99麻豆精品福利 | 青青草婷婷 | 国产在线天堂 | 熟女一区二区三区四区 | 国产精品男同 | 在线观看一区二区三区视频 | 国产免费无码XXXXX视频 | 99热这里只有精品4 精品国产黄色 | www.天天干 | 天天做天天摸天天爽天天爱 | 午夜电影一区二区三区 | 校霸被c到爽夹震蛋上课高潮 | 好吊视频一区二区 | jizzjizz日本人| se婷婷| 羞辱狗奴的句子有哪些 | 男人的网址 | 精品91av| 亚洲免费一区 |