亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP $this變量一些理解

2024-09-04 11:43:36
字體:
來源:轉載
供稿:網友

在PHP的詞法分析時,$this變量是符合其規則的,在語法解析生成中間代碼時,PHP內核會根據變量類型在生成賦值的中間代碼時判斷是否為$this變量,如果是則報錯。這里為什么要報錯呢?因為this作為一個特殊的變量,在對象的成員方法等調用初始化時會將this變量添加到活動符號表。

在類的成員方法里面,可以用 ->(對象運算符):$this->property(其中 property 是該屬性名)這種方式來訪問非靜態屬性。

當一個方法在類定義內部被調用時,有一個可用的偽變量 $this。$this 是一個到主叫對象的引用(通常是該方法所從屬的對象,但如果是從第二個對象靜態調用時也可能是另一個對象)。

在詞法分析、語法分析并生成中間代碼時,$this作為一個特殊的變量存在,特別是在生成中間代碼時,代碼中充斥著對于this的特殊處理。這些都是為后面的運行做準備,如識別標記出某處使用this變量,在存儲opcode的zend_op_array結構體中專門有一個變量this_var標識是否有this變量。一個函數或一個類方法都會生成一個新的zend_op_array,在生成中間代碼時,判斷當前變量是否為this變量。

this變量在執行過程中會有兩種存在狀態,一種是全局傳遞的狀態,存儲在EG(This),一種是當前作用域狀態,以this變量存儲在EG(active_symbol_table)(當前執行環境的活動符號表)。

在我們執行一個 op_array 時,比如一個對象的方法,PHP內核會給這個 op_array 生成一個 zendexecutedata ,在生成初始化時,EG(This) 會添加到EG(active_symbol_table) 。

在方法調用過程中,如果有用到this變量,則會直接取EG(active_symbol_table)的值。

那么一個對象中的EG(This)在哪里初始化呢?

就EG(This)變量本身來說,在我們初始化PHP的執行環境時,它和其它全局變量(如EG(scope)等)一樣都會被初始化為NULL。

對于一個對象來說,當我們創建了一個對象,調用時,PHP內核會將當前獲得的對象直接賦值給EG(This),而這個當前獲得的對象是在通過new操作生成對象時創建的對象本身。

如下這個簡單示例:

  1. class Foo { 
  2.       public $var = 10; 
  3.  
  4.       function t() { 
  5.            echo $this->var;      
  6.       } 
  7.  
  8.       function t2() { 
  9.        echo 33; 
  10.   } 
  11.  } 
  12.  
  13.  $foo = new Foo(); 
  14.  $foo->t(); 

其主程序流程生成的中間代碼如下:

  1. function name:  (null) 
  2.  number of ops:  8 
  3.  compiled vars:  !0 = $foo 
  4.  line     # *  op                           fetch          ext  return  operands 
  5.  --------------------------------------------------------------------------------- 
  6.     2     0  >   NOP                                                       
  7.    15     1      ZEND_FETCH_CLASS                              4  :1      'Foo' 
  8.           2      NEW                                              $2      :1 
  9.           3      DO_FCALL_BY_NAME                              0           
  10.           4      ASSIGN                                                   !0, $2 
  11.    16     5      ZEND_INIT_METHOD_CALL                                    !0, 't' 
  12.           6      DO_FCALL_BY_NAME                              0           
  13.           7    > RETURN     
  14.                                                1this 

變量原始的對象值出生在 opcode NEW,經過了賦值(ASSIGN)后,在方法初始化時,將變量本身傳遞給執行環境的調用者,調用者又在執行調用(DO_FCALL_BY_NAME)時將變量傳遞給EG(This),當執行這個方法的op_array時,初始化當前作用域的環境(zend_execute_data)時,會將EG(This)作為$this變量添加到活動符號表,后續方法中的$this變量的使用就會直接取符號表的變量。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲图片在线综合| 精品动漫一区二区| 亚洲乱亚洲乱妇无码| 91理论片午午论夜理片久久| 日韩在线中文视频| 久久精品国产清自在天天线| 庆余年2免费日韩剧观看大牛| 欧美性生交大片免网| 狠狠躁18三区二区一区| 欧美一级黄色网| 欧美伊久线香蕉线新在线| 国产精品自拍网| 国产97在线|日韩| 日韩免费观看网站| 亚洲精品自拍第一页| 成人精品久久av网站| 亚洲男女自偷自拍图片另类| 中文字幕亚洲色图| 欧美日韩国产丝袜另类| 精品视频www| 色视频www在线播放国产成人| 精品久久久久久久久久ntr影视| 亚洲综合视频1区| 亚洲精品中文字幕有码专区| 久久影视电视剧免费网站清宫辞电视| 久久激情视频久久| 国产成人久久精品| 国产精品扒开腿做爽爽爽的视频| 91精品国产91久久久久久最新| 日韩视频免费在线观看| 欧美最猛性xxxx| 国产成人精品一区二区| 欧美高清一级大片| 影音先锋日韩有码| 91精品久久久久久综合乱菊| 午夜欧美不卡精品aaaaa| 欧美成aaa人片免费看| 久久九九亚洲综合| 国产视频精品免费播放| 国产精品99久久久久久白浆小说| 久久99国产精品自在自在app| 日韩成人在线免费观看| 国产成人a亚洲精品| 亚洲精品日韩丝袜精品| 国产精品麻豆va在线播放| 亚洲欧美成人一区二区在线电影| 亚洲国产成人久久综合| 7777精品视频| 国产精品一二三在线| 日韩最新中文字幕电影免费看| 日韩69视频在线观看| 国产精品久久久久久超碰| 色多多国产成人永久免费网站| 国产成人精品综合久久久| 国产午夜精品免费一区二区三区| 国产精品美女av| 欧美性xxxxx极品| 久久久视频免费观看| 91亚洲国产成人久久精品网站| 亚洲欧美日韩中文在线制服| 九九九热精品免费视频观看网站| 欧美性感美女h网站在线观看免费| 一本一本久久a久久精品牛牛影视| 91sa在线看| 国产精品精品视频| 97国产精品免费视频| 成人做爰www免费看视频网站| 国产精品最新在线观看| 欧美亚洲视频在线看网址| 国产精品美女网站| 欧美日韩不卡合集视频| 欧美成人精品在线播放| 亚洲国产精品va在线| 欧美精品xxx| 欧美网站在线观看| yw.139尤物在线精品视频| 亚洲开心激情网| 欧美激情精品久久久久| 秋霞午夜一区二区| 亚洲社区在线观看| 91精品在线一区| 亚洲三级av在线| 日韩精品福利在线| 国产中文字幕亚洲| 欧美黑人巨大xxx极品| 91免费国产视频| 久久五月情影视| 久久精品99久久香蕉国产色戒| 国产97在线|亚洲| 九九热在线精品视频| 91免费综合在线| 久久精品亚洲94久久精品| 亚洲精品自在久久| 久久成人这里只有精品| 国产成人a亚洲精品| 亚洲自拍小视频免费观看| 伊人伊人伊人久久| 精品精品国产国产自在线| 国产一区二区三区中文| 成人网页在线免费观看| 亚洲精品电影网站| 在线亚洲欧美视频| xxxxxxxxx欧美| 亚洲成人久久一区| 成人网在线免费看| 亚洲国产91精品在线观看| 91tv亚洲精品香蕉国产一区7ujn| 欧美老肥婆性猛交视频| 久久免费视频在线| 久久久999精品| 亚洲国产小视频在线观看| 日韩在线视频播放| 日韩av网址在线| 奇米成人av国产一区二区三区| 久久久久久国产免费| 深夜福利亚洲导航| 亚洲免费一在线| 亚洲va国产va天堂va久久| 一区二区三区www| 国产成人精品在线视频| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲成人精品在线| 亚洲国产精品成人av| 亚洲va欧美va国产综合剧情| 精品国产一区二区三区久久久| 麻豆国产精品va在线观看不卡| 欧美国产亚洲精品久久久8v| 亚洲第一精品夜夜躁人人爽| 亚洲第一页自拍| 国产精品久久久久国产a级| 97精品国产97久久久久久| 日韩三级影视基地| 91最新在线免费观看| 国产在线播放91| 在线性视频日韩欧美| 91精品视频专区| 亚洲三级av在线| 欧美性少妇18aaaa视频| 亚洲白虎美女被爆操| 欧洲永久精品大片ww免费漫画| 久久视频在线视频| 日韩在线中文字| 激情懂色av一区av二区av| 日韩精品在线播放| 大胆人体色综合| 69**夜色精品国产69乱| 国产精品69久久| 成人在线视频网站| 欧美一级淫片videoshd| 亚洲丁香久久久| 中文字幕在线观看亚洲| 久久视频这里只有精品| 亚洲男人av电影| 91啪国产在线| 性夜试看影院91社区| 美女久久久久久久| 国内精品中文字幕| 久久久av网站| 992tv成人免费视频| 欧美性猛交xxxx乱大交蜜桃| 7m精品福利视频导航| 欧美劲爆第一页| 日韩中文字幕网址| 97色伦亚洲国产|