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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php是不是面向对象编程,PHP面向对象编程入门

發(fā)布時(shí)間:2025/3/15 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php是不是面向对象编程,PHP面向对象编程入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、常用術(shù)語(yǔ)說(shuō)明

class 類

object 對(duì)象

new 實(shí)例化

member 類成員

method 方法,成員函數(shù)

property 屬性,成員變量

constant 類常量

2、類的構(gòu)造

class ClassName{ //class關(guān)鍵字加類名

//類中只能有三種成員:屬性、類常量、方法,不限數(shù)量

//成員變量(屬性)

public $var; //普通屬性,只能通過(guò)對(duì)象訪問(wèn),聲明時(shí)必須使用訪問(wèn)控制修飾符

public static $s_var = 0; //靜態(tài)屬性,使用static關(guān)鍵字修飾的屬性

const PI = 3.14; //類常量,聲明時(shí)必須使用const關(guān)鍵字修飾并賦值,其值不可修改

//成員方法

function fn0(){

//普通成員方法

echo '普通成員方法運(yùn)行了
';

}

static function fn1(){

//靜態(tài)方法

echo self::$s_var.'靜態(tài)方法運(yùn)行了
'; //類似$this,在類內(nèi)部使用self關(guān)鍵字代表當(dāng)前類名

}

public function __construct($var){

//構(gòu)造方法,對(duì)象實(shí)例化時(shí)自動(dòng)調(diào)用該方法

$this->var = $var; //$this表示當(dāng)前對(duì)象

echo '構(gòu)造方法運(yùn)行了
';

}

public function __destruct(){

//析構(gòu)方法,對(duì)象銷毀時(shí)自動(dòng)調(diào)用該方法

echo '析構(gòu)方法運(yùn)行了
';

}

public function __clone(){

//克隆方法,克隆對(duì)象時(shí)自動(dòng)調(diào)用該方法

echo '克隆方法運(yùn)行了
';

}

}

$c = new ClassName('test'); //對(duì)象實(shí)例化

echo $c->var.'
'; //訪問(wèn)對(duì)象屬性$obj->var

$c->var = 'update'; //修改對(duì)象屬性

$c->new_var = 'add'; //新增對(duì)象屬性

var_dump($c);echo '
';

unset($c->new_var); //刪除對(duì)象屬性

var_dump($c);echo '
';

$c->fn0(); //調(diào)用成員方法

echo ClassName::PI.'
'; //訪問(wèn)類常量,使用:類名::類常量名

echo ClassName::$s_var.'
'; //訪問(wèn)靜態(tài)屬性,使用:類名::$靜態(tài)屬性名

ClassName::fn1(); //調(diào)用靜態(tài)方法

3、成員修飾符

3.1、關(guān)鍵字:

類常量,不可修改性const(修飾屬性),類常量只能通過(guò)類訪問(wèn):類名加范圍解析操作符(雙冒號(hào)::)

靜態(tài)成員-static(修飾屬性和方法),靜態(tài)成員只能通過(guò)類訪問(wèn)

不可繼承性final(修飾類和方法)

3.2、訪問(wèn)控制符

public:表示公有的,其修飾的屬性和方法可以在類內(nèi)和類外訪問(wèn),可以被繼承

protected:表示受保護(hù)的,,其修飾的屬性和方法只可以在類內(nèi)訪問(wèn),可以被繼承

privated:表示私有的,其修飾的屬性和方法只可以在類內(nèi)訪問(wèn),不可以被繼承

屬性前一定要加一個(gè)訪問(wèn)控制修飾符,類常量不用加訪問(wèn)控制修飾符,方法前可以不加訪問(wèn)控制修飾符,默認(rèn)是public

4、對(duì)象值傳遞

對(duì)象的賦值操作是引用賦值,即:當(dāng)將對(duì)象a的值賦值給對(duì)象b時(shí),a和b指向內(nèi)存中同一個(gè)地址

如果需要實(shí)現(xiàn)真正的復(fù)制,可以使用對(duì)象克隆方法:$b = clone $a;

私有化__clone方法可以禁止對(duì)象被克隆:private function __clone(){}

5、類的加載

類的訪問(wèn)必須保證類在內(nèi)存中已經(jīng)存在,所有在使用類之前需要將包含類的PHP文件加載到內(nèi)存,本質(zhì)是文件加載。

手動(dòng)加載:

if(!class_exists('Man')){

//類不存在,加載

include_once 'Man.php';

}

new Man();

自動(dòng)加載:

php7以前:

function __autoload($class_name){

//假設(shè)有多個(gè)類放在多個(gè)文件夾中

//先嘗試去a文件夾中尋找類

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

//再嘗試去b文件夾中尋找類

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

//以此類推,直到找到類或找完所有包含類的文件夾為止

}

$d = new Dog(); //實(shí)例化Dog類,系統(tǒng)自動(dòng)調(diào)用__autoload函數(shù)

php7以后:

function my_autoload($class_name){

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

exit;

}

}

spl_autoload_register('my_autoload');

$d = new Dog();

也可以分開(kāi)多個(gè)加載函數(shù):

function a_autoload($class_name){

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

function b_autoload($class_name){

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

spl_autoload_register('a_autoload');

spl_autoload_register('b_autoload');

$d = new Dog();

自動(dòng)加載類:

class Autoload{

public static function loadA($class_name){

$file = 'a/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

public static function loadB($class_name){

$file = 'b/'.$class_name.'.class.php';

if(file_exists($file)){

include_once $file;

}

}

}

spl_autoload_register(array('Autoload','loadA'));

spl_autoload_register(array('Autoload','loadB'));

$d = new Dog();

6、設(shè)計(jì)模式

單例模式:一個(gè)類有且僅有一個(gè)對(duì)象,例如操作系統(tǒng)中的資源管理器,目的是為了保護(hù)資源的唯一性

class Singleton{

//使用一個(gè)靜態(tài)屬性保存生產(chǎn)出來(lái)的對(duì)象

private static $object = NULL;

//私有化構(gòu)造方法

private function __construct(){}

//類入口

public static function getInstance(){

if(!(self::$object instanceof self)){

self::$object = new self();

}

return self::$object;

}

//私有化克隆方法,防止克隆產(chǎn)生新對(duì)象

private function __clone(){}

}

//實(shí)例化兩個(gè)對(duì)象

$s = Singleton::getInstance();

$s1 = Singleton::getInstance();

var_dump($s,$s1); //檢測(cè)到是同一個(gè)對(duì)象

工廠模式factory:

由一個(gè)地方生產(chǎn)對(duì)象,其他位置就不需要額外實(shí)例化對(duì)象,從而可以方便后期代碼統(tǒng)一維護(hù)(改名),方便隱藏真實(shí)的類結(jié)構(gòu)。

工廠模式針對(duì)相似模型的統(tǒng)一產(chǎn)出,要有一批具有類似功能的類,其本質(zhì)是相似的大類下的小類

靜態(tài)工廠(生產(chǎn)對(duì)象時(shí)需要知道類名):

class Man{

public function display(){

echo 'Man
';

}

}

class Woman{

public function display(){

echo 'Woman
';

}

}

class Child{

public function display(){

echo 'Child
';

}

}

class HumanFactory{

public static function getInstance($class_name){

return new $class_name();

}

}

$m = HumanFactory::getInstance('Man');

$w = HumanFactory::getInstance('Woman');

$c = HumanFactory::getInstance('Child');

$m->display();

$w->display();

$c->display();

匿名工廠(生產(chǎn)對(duì)象時(shí)需要知道類名對(duì)應(yīng)的符號(hào)):

class HumanFactory{

public static function getInstance($flag){

switch ($flag) {

case 'm':

return new Man();

case 'w':

return new Woman();

case 'c':

return new Child();

default:

return null;

}

}

}

$m = HumanFactory::getInstance('m');

$w = HumanFactory::getInstance('w');

$c = HumanFactory::getInstance('c');

標(biāo)簽:function,入門(mén),public,file,var,PHP,class,面向?qū)ο缶幊?name

來(lái)源: https://www.cnblogs.com/chuanzi/p/10380555.html

總結(jié)

以上是生活随笔為你收集整理的php是不是面向对象编程,PHP面向对象编程入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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