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

歡迎訪問 生活随笔!

生活随笔

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

php

PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入

發布時間:2024/4/17 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

① PHP 面向對象高級特性

② 11 種 PHP 設計模式

③ PSR-0,Composer,Phar 等最流行的技術

目標是掌握 PHP 各類設計模式,以及具備設計純面向對象框架和系統的能力

?

【命名空間】

早期 php 沒有命名空間的概念,所有的代碼可以被認為是在同一個命名空間內運行,因此不能出現名稱相同的類或函數:

代碼 a ---- 類 a

代碼 b ---- 類 b

代碼 c ---- 函數 d

代碼 d --- 函數 d

以上都是不允許的情況。

?

php 5.3 增加了命名空間的概念。

例:加入一個項目下有 3 個文件:

test1.php:

<?php function test(){echo __FILE__; }

test2.php:

<?php function test(){echo __FILE__; }

test.php:

<?php require 'test1.php'; require 'test2.php';

?

運行 test.php,報錯:Fatal error: Cannot redeclare test() (previously declared in D:\practise\php\design\test1.php:4) in D:\practise\php\design\test2.php on line (函數重命名導致致命錯誤)

?

當 test1.php 改為:

<?php namespace Test1;function test(){echo __FILE__; }

test2.php 改為:

<?php namespace Test2;function test(){echo __FILE__; }

運行 test.php ,不會報錯。

?

【引用命名空間中的方法】

命名空間名稱\方法名

如:

test.php

<?php require 'Test1.php'; require 'Test2.php';Test1\test();

頁面輸出:D:\practise\php\design\Test1.php

?

【類的自動載入】

當項目越來越大時,文件越來越多,如果一個文件要依賴幾十個php 類,那么就要在該文件的代碼之前寫幾十行的 require 語句,開發和管理起來非常不便。在php 5.2 之后的版本提供了類的自動載入功能。早起 php 使用 __autoload() 方法。

例如,一個項目中有 3 個文件

Test1.php:

<?php class Test1{static function test(){echo __METHOD__;} }

Test2.php:

<?php class Test2{static function test(){echo __METHOD__;} }

test.php:

<?php Test1::test(); Test2::test();function __autoload($class){require __DIR__.'/'.$class.'.php'; }

運行 test.php,頁面輸出:

Test1::testTest2::test

?

后來__autoload() 方法被廢棄了,原因是一個 php 工程可能會依賴于多個框架,如果每一個框架都有這個函數,就會報函數重復定義的致命錯誤。在php 5.3 版本之后,官方提供了spl_autoload_register(); 方法取代 __aotoload() 方法。?

spl_autoload_register() 的特點是允許存在多個?spl_autoload_register() 方法。

?修改 test.php:

<?php spl_autoload_register('autoload1');Test1::test(); Test2::test();function autoload1($class){require __DIR__.'/'.$class.'.php'; }

頁面輸出結果不變。

此時如果多個框架都有自己的類自動載入,只需要調用多次?spl_autoload_register() 即可,每個類都會分別完成自己的類自動載入,而且不會沖突:

<?php spl_autoload_register('autoload1'); spl_autoload_register('autoload2');Test1::test(); Test2::test();function autoload1($class){require __DIR__.'/'.$class.'.php'; }function autoload2($class){require __DIR__.'/'.$class.'.php'; }

頁面輸出結果不變。

?

?

?

?

【開發工具】:PHPStorm

【編程字體】:使用等寬字體(常見的有Courier View,Consolas),推薦使用Source Code Pro(Adobe 公司專為程序員設計,免費開源)

【運行環境】:EasyPHP,集成了Apache,MySQL,PHPMyAdmin

轉載于:https://www.cnblogs.com/dee0912/p/4396988.html

總結

以上是生活随笔為你收集整理的PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入的全部內容,希望文章能夠幫你解決所遇到的問題。

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