@value 静态变量_你理解 PHP 中的静态方法吗?
它仍然是一個有爭議的話題。讓我們嘗試了解原因。
函數中的靜態變量
您可能已經看過以下代碼:
function testStatic() {static $x = 0;$x++;return $x; }在這里,我們每次調用 testStatic() 時,關鍵字 static 允許遞增 $x:
testStatic(); testStatic(); testStatic(); echo testStatic();最后輸出 “4”。與其他局部變量不同,靜態變量將其值保留在函數作用域之外。
關于這點有一些有趣的用法,例如備忘錄。人們使用此技術存儲復雜運算之后的結果來優化其腳本。
PHP 類中的靜態
每次在 PHP 類中使用關鍵字 static 時,都在設置與類相關的內容。你無需實例化類即可訪問它們:
class MyClass {public static $myStaticVar;public static function myStaticFunction() {} }MyClass::myStaticFunction(); MyClass::$myStaticVar;換句話說,你不會將變量和函數綁定到特定對象示例上。
但是,它與過程編程有何不同?為什么還要通過類來使用呢?
靜態方法與過程函數
你的代碼經常需要一些輔助類,大多數時候,它們以靜態調用的形式存在。
$title = TextUtils::normalizeTitle($title);但是與下面這個有什么不同呢?
$title = normalizeTitle($title);對于 PHP 而言,這可能沒什么不同。靜態方法相當于命名空間函數,僅此而已。
命名空間從 PHP 5.5 開始引入。從技術上講,下面例子中的簡單的函數與靜態方法沒什么不同。
$title1 = TheNamespaceTextUtils::normalizeTitle($title); $title2 = TheNamespacenormalizeTitle($title);所以如果類中的所有成員都是靜態的,那么就可以改寫成過程函數和命名空間的形式。但是總是如此嗎?
靜態 VS 面向對象
你不需要實例化類來訪問其靜態方法。因此,你的類的所有實例都共享相同的靜態方法。
在 PHP 類中,你可通過 $this 來獲取當前實例,而靜態方法無法訪問它。
來看看下面這個例子
<?php class Order {public $price;public function __construct($price) {$this->price = self::formatPrice($price);}protected static function formatPrice($price) { return round($price, 3);} }$order = new Order('73.1111'); echo $order->price;formatPrice() 不需要使用 $this,因為該方法并沒有涉及到實例的變更。它是靜態的,所有的實例共享該方法。
利弊
許多開發更喜歡用非靜態方法而不是靜態方法。一些人認為靜態方法會破壞類的封裝性,另外一些則說靜態方法會導致代碼異味。
不要誤解我,這些確實是事實。我的意思是對于該話題的討論存在一些迷思,例如:
靜態代碼不安全。相反,在應用中設置非可變元素似乎更安全。
如果你有大量的數據,使用靜態可能不是一個好主意。如果你需要狀態機制,也就是說,需要使用邏輯隔離的實例,這似乎也不是一個好主意。
總結
靜態可能不錯,但可能被誤用了。只是在同等條件下,你不能將其應用于任何事情。
我喜歡 OOP,這是一個很棒的范例,但是我想知道是否所有的東西都需要一個對象。我想不是,我有想聽聽你的意見。
更多學習內容請訪問:
八重櫻:騰訊T3-T4標準精品PHP架構師教程目錄大全,只要你看完保證薪資上升一個臺階(持續更新)?zhuanlan.zhihu.com以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的官方群點擊此處。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的@value 静态变量_你理解 PHP 中的静态方法吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .dat数据文件怎么打开_U盘坏了怎么恢
- 下一篇: 力扣高频算法php_互联网公司最常见的面