Php中的呼叫上下文和解析上下文

2021-07-25 01:35:04 字數 1138 閱讀 9697

在閱讀《深入php物件導向、模式與實踐》一書中的第4.5章節過程中,遇到了「呼叫上下文」、「解析上下文」兩個術語,自己想了半天,還是未能想通順,於是還是查閱了相關資料,一般情況下,這個時候囫圇吞棗的過去,以後遇到問題還是不會被解決。

參考:事例1

<?php

classa}

class

bextends

a

執行結果:b value

由該段**可以知道,首先定義了乙個a類,然後定義了乙個繼承自a類的b類,兩個類中都定義了$value,這個時候去例項化b類,並執行繼承了a類中的printvalue()方法,結果列印出「b value」。類a中的this呼叫被稱為「呼叫上下文」。

事例2

<?php

classa}

class

bextends

a

執行結果:a static value

a類中定義了靜態屬性value,在printvalue()方法中使用self::$value進行呼叫,b類中也定義了乙個靜態屬性value,而後例項化b類,呼叫繼承自a類的printvalue()方法,最後列印出的是「a static value」。這個時候,類a中使用self呼叫被稱為「解析上下文」。

這裡的self被解析為定義printvalue()的a類,而不是解析為呼叫self的b類。

事例3

<?php

class

aclass

bextends

a}

執行結果:a static

value

a類中定義了乙個靜態屬性value,然後定義了乙個繼承自a類的b類,b類中未定義和a類相同的靜態屬性value,但是定義了乙個printvalue()方法,並在該方法中,使用self::$value來呼叫。按「解析上下文的」說法,執行結果應該是會報錯的,說沒有value這個屬性,但是卻列印出了a類中定義的value的值,由此可見,此時self呼叫根據繼承的特性去尋找value值的,這點php並未嚴格執行呼叫上下文和解析上下文

系統呼叫 上下文 中斷

系統呼叫 在作業系統上如果想要執行你的程式,就得靠自己從面向底層硬體的 編起,但這件事太枯燥,且不是每個人都能做到,這樣作業系統就替我們做這些事情,把硬體封裝,統一提供一套介面,這些介面就是系統呼叫 系統呼叫把應用程式的請求傳給核心,當作業系統接收到系統呼叫請求後,會讓處理器進入核心模式,呼叫相應的...

Flask 中請求上下文和應用上下文的區別和作用?

兩者作用 請求上下文 request context flask從客戶端收到請求時,要讓檢視函式能訪問一些物件,這樣才能處理請求。請求物件是一 個很好的例子,它封裝了客戶端傳送的http 請求。要想讓檢視函式能夠訪問請求物件,乙個顯而易見的方式是將其作為引數傳入檢視函式,不過 這會導致程式中的每個檢...

Flask之請求上下文 應用上下文的概述

flask中有兩種上下文,請求上下文和應用上下文 一 請求上下文 request context request和session都屬於請求上下文物件。2.g 處理請求時,用於臨時儲存的物件,每次請求都會重設這個變數。比如 我們可以獲取一些臨時請求的使用者資訊。request 在每次http請求發生時...