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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2025/3/15 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php是不是面向对象编程,PHP面向对象编程入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、常用術語說明

class 類

object 對象

new 實例化

member 類成員

method 方法,成員函數

property 屬性,成員變量

constant 類常量

2、類的構造

class ClassName{ //class關鍵字加類名

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

//成員變量(屬性)

public $var; //普通屬性,只能通過對象訪問,聲明時必須使用訪問控制修飾符

public static $s_var = 0; //靜態屬性,使用static關鍵字修飾的屬性

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

//成員方法

function fn0(){

//普通成員方法

echo '普通成員方法運行了
';

}

static function fn1(){

//靜態方法

echo self::$s_var.'靜態方法運行了
'; //類似$this,在類內部使用self關鍵字代表當前類名

}

public function __construct($var){

//構造方法,對象實例化時自動調用該方法

$this->var = $var; //$this表示當前對象

echo '構造方法運行了
';

}

public function __destruct(){

//析構方法,對象銷毀時自動調用該方法

echo '析構方法運行了
';

}

public function __clone(){

//克隆方法,克隆對象時自動調用該方法

echo '克隆方法運行了
';

}

}

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

echo $c->var.'
'; //訪問對象屬性$obj->var

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

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

var_dump($c);echo '
';

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

var_dump($c);echo '
';

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

echo ClassName::PI.'
'; //訪問類常量,使用:類名::類常量名

echo ClassName::$s_var.'
'; //訪問靜態屬性,使用:類名::$靜態屬性名

ClassName::fn1(); //調用靜態方法

3、成員修飾符

3.1、關鍵字:

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

靜態成員-static(修飾屬性和方法),靜態成員只能通過類訪問

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

3.2、訪問控制符

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

protected:表示受保護的,,其修飾的屬性和方法只可以在類內訪問,可以被繼承

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

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

4、對象值傳遞

對象的賦值操作是引用賦值,即:當將對象a的值賦值給對象b時,a和b指向內存中同一個地址

如果需要實現真正的復制,可以使用對象克隆方法:$b = clone $a;

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

5、類的加載

類的訪問必須保證類在內存中已經存在,所有在使用類之前需要將包含類的PHP文件加載到內存,本質是文件加載。

手動加載:

if(!class_exists('Man')){

//類不存在,加載

include_once 'Man.php';

}

new Man();

自動加載:

php7以前:

function __autoload($class_name){

//假設有多個類放在多個文件夾中

//先嘗試去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(); //實例化Dog類,系統自動調用__autoload函數

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();

也可以分開多個加載函數:

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();

自動加載類:

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、設計模式

單例模式:一個類有且僅有一個對象,例如操作系統中的資源管理器,目的是為了保護資源的唯一性

class Singleton{

//使用一個靜態屬性保存生產出來的對象

private static $object = NULL;

//私有化構造方法

private function __construct(){}

//類入口

public static function getInstance(){

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

self::$object = new self();

}

return self::$object;

}

//私有化克隆方法,防止克隆產生新對象

private function __clone(){}

}

//實例化兩個對象

$s = Singleton::getInstance();

$s1 = Singleton::getInstance();

var_dump($s,$s1); //檢測到是同一個對象

工廠模式factory:

由一個地方生產對象,其他位置就不需要額外實例化對象,從而可以方便后期代碼統一維護(改名),方便隱藏真實的類結構。

工廠模式針對相似模型的統一產出,要有一批具有類似功能的類,其本質是相似的大類下的小類

靜態工廠(生產對象時需要知道類名):

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();

匿名工廠(生產對象時需要知道類名對應的符號):

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');

標簽:function,入門,public,file,var,PHP,class,面向對象編程,name

來源: https://www.cnblogs.com/chuanzi/p/10380555.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。