mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-17 01:18:55 +00:00

git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@286794 c90b9560-bf6c-de11-be94-00142212c4b1
9234 lines
280 KiB
XML
9234 lines
280 KiB
XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
|
<!-- $Revision$ -->
|
|
<part xml:id="internals2.opcodes" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
<title>Zend Engine 2 opcode list</title>
|
|
|
|
<partintro xml:id="internals2.opcodes.preface">
|
|
<title>Opcodes</title>
|
|
<simpara>
|
|
This page lists and partially documents all the opcodes generated by Zend
|
|
Engine 2 when it parses PHP files. Opcodes may be dumped for a given PHP
|
|
file using the vld extension (see
|
|
<link xlink:href="&url.pecl.package;vld">&url.pecl.package;vld</link>).
|
|
</simpara>
|
|
</partintro>
|
|
|
|
<chapter xml:id="internals2.opcodes.ops">
|
|
<title>Opcodes</title>
|
|
|
|
<section xml:id="internals2.opcodes.list">
|
|
<title>Opcode list</title>
|
|
|
|
<table>
|
|
<title>Opcode list</title>
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry>Number</entry>
|
|
<entry>Name</entry>
|
|
<entry>Has sample code?</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row><entry>0</entry><entry><xref linkend="internals2.opcodes.nop"/></entry><entry>yes</entry></row>
|
|
<row><entry>1</entry><entry><xref linkend="internals2.opcodes.add"/></entry><entry>yes</entry></row>
|
|
<row><entry>2</entry><entry><xref linkend="internals2.opcodes.sub"/></entry><entry>yes</entry></row>
|
|
<row><entry>3</entry><entry><xref linkend="internals2.opcodes.mul"/></entry><entry>yes</entry></row>
|
|
<row><entry>4</entry><entry><xref linkend="internals2.opcodes.div"/></entry><entry>yes</entry></row>
|
|
<row><entry>5</entry><entry><xref linkend="internals2.opcodes.mod"/></entry><entry>yes</entry></row>
|
|
<row><entry>6</entry><entry><xref linkend="internals2.opcodes.sl"/></entry><entry>yes</entry></row>
|
|
<row><entry>7</entry><entry><xref linkend="internals2.opcodes.sr"/></entry><entry>yes</entry></row>
|
|
<row><entry>8</entry><entry><xref linkend="internals2.opcodes.concat"/></entry><entry>yes</entry></row>
|
|
<row><entry>9</entry><entry><xref linkend="internals2.opcodes.bw-or"/></entry><entry>yes</entry></row>
|
|
<row><entry>10</entry><entry><xref linkend="internals2.opcodes.bw-and"/></entry><entry>yes</entry></row>
|
|
<row><entry>11</entry><entry><xref linkend="internals2.opcodes.bw-xor"/></entry><entry>yes</entry></row>
|
|
<row><entry>12</entry><entry><xref linkend="internals2.opcodes.bw-not"/></entry><entry>yes</entry></row>
|
|
<row><entry>13</entry><entry><xref linkend="internals2.opcodes.bool-not"/></entry><entry>yes</entry></row>
|
|
<row><entry>14</entry><entry><xref linkend="internals2.opcodes.bool-xor"/></entry><entry>yes</entry></row>
|
|
<row><entry>15</entry><entry><xref linkend="internals2.opcodes.is-identical"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>16</entry><entry><xref linkend="internals2.opcodes.is-not-identical"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row><entry>17</entry><entry><xref linkend="internals2.opcodes.is-equal"/></entry><entry>yes</entry></row>
|
|
<row><entry>18</entry><entry><xref linkend="internals2.opcodes.is-not-equal"/></entry><entry>yes</entry></row>
|
|
<row><entry>19</entry><entry><xref linkend="internals2.opcodes.is-smaller"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>20</entry><entry><xref linkend="internals2.opcodes.is-smaller-or-equal"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row><entry>21</entry><entry><xref linkend="internals2.opcodes.cast"/></entry><entry>yes</entry></row>
|
|
<row><entry>22</entry><entry><xref linkend="internals2.opcodes.qm-assign"/></entry><entry>yes</entry></row>
|
|
<row><entry>23</entry><entry><xref linkend="internals2.opcodes.assign-add"/></entry><entry>yes</entry></row>
|
|
<row><entry>24</entry><entry><xref linkend="internals2.opcodes.assign-sub"/></entry><entry>yes</entry></row>
|
|
<row><entry>25</entry><entry><xref linkend="internals2.opcodes.assign-mul"/></entry><entry>yes</entry></row>
|
|
<row><entry>26</entry><entry><xref linkend="internals2.opcodes.assign-div"/></entry><entry>yes</entry></row>
|
|
<row><entry>27</entry><entry><xref linkend="internals2.opcodes.assign-mod"/></entry><entry>yes</entry></row>
|
|
<row><entry>28</entry><entry><xref linkend="internals2.opcodes.assign-sl"/></entry><entry>yes</entry></row>
|
|
<row><entry>29</entry><entry><xref linkend="internals2.opcodes.assign-sr"/></entry><entry>yes</entry></row>
|
|
<row><entry>30</entry><entry><xref linkend="internals2.opcodes.assign-concat"/></entry><entry>yes</entry></row>
|
|
<row><entry>31</entry><entry><xref linkend="internals2.opcodes.assign-bw-or"/></entry><entry>yes</entry></row>
|
|
<row><entry>32</entry><entry><xref linkend="internals2.opcodes.assign-bw-and"/></entry><entry>yes</entry></row>
|
|
<row><entry>33</entry><entry><xref linkend="internals2.opcodes.assign-bw-xor"/></entry><entry>yes</entry></row>
|
|
<row><entry>34</entry><entry><xref linkend="internals2.opcodes.pre-inc"/></entry><entry>yes</entry></row>
|
|
<row><entry>35</entry><entry><xref linkend="internals2.opcodes.pre-dec"/></entry><entry>yes</entry></row>
|
|
<row><entry>36</entry><entry><xref linkend="internals2.opcodes.post-inc"/></entry><entry>yes</entry></row>
|
|
<row><entry>37</entry><entry><xref linkend="internals2.opcodes.post-dec"/></entry><entry>yes</entry></row>
|
|
<row><entry>38</entry><entry><xref linkend="internals2.opcodes.assign"/></entry><entry>yes</entry></row>
|
|
<row><entry>39</entry><entry><xref linkend="internals2.opcodes.assign-ref"/></entry><entry>yes</entry></row>
|
|
<row><entry>40</entry><entry><xref linkend="internals2.opcodes.echo"/></entry><entry>yes</entry></row>
|
|
<row><entry>41</entry><entry><xref linkend="internals2.opcodes.print"/></entry><entry>yes</entry></row>
|
|
<row><entry>42</entry><entry>not documented</entry><entry>no</entry></row>
|
|
<row><entry>43</entry><entry><xref linkend="internals2.opcodes.jmpz"/></entry><entry>yes</entry></row>
|
|
<row><entry>44</entry><entry><xref linkend="internals2.opcodes.jmpnz"/></entry><entry>yes</entry></row>
|
|
<row><entry>45</entry><entry><xref linkend="internals2.opcodes.jmpznz"/></entry><entry>yes</entry></row>
|
|
<row><entry>46</entry><entry><xref linkend="internals2.opcodes.jmpz-ex"/></entry><entry>yes</entry></row>
|
|
<row><entry>47</entry><entry><xref linkend="internals2.opcodes.jmpnz-ex"/></entry><entry>yes</entry></row>
|
|
<row><entry>48</entry><entry><xref linkend="internals2.opcodes.case"/></entry><entry>yes</entry></row>
|
|
<row><entry>49</entry><entry><xref linkend="internals2.opcodes.switch-free"/></entry><entry>yes</entry></row>
|
|
<row><entry>50</entry><entry><xref linkend="internals2.opcodes.brk"/></entry><entry>yes</entry></row>
|
|
<row><entry>51</entry><entry>not documented</entry><entry>no</entry></row>
|
|
<row><entry>52</entry><entry><xref linkend="internals2.opcodes.bool"/></entry><entry>yes</entry></row>
|
|
<row><entry>53</entry><entry><xref linkend="internals2.opcodes.init-string"/></entry><entry>yes</entry></row>
|
|
<row><entry>54</entry><entry><xref linkend="internals2.opcodes.add-char"/></entry><entry>yes</entry></row>
|
|
<row><entry>55</entry><entry><xref linkend="internals2.opcodes.add-string"/></entry><entry>yes</entry></row>
|
|
<row><entry>56</entry><entry><xref linkend="internals2.opcodes.add-var"/></entry><entry>yes</entry></row>
|
|
<row><entry>57</entry><entry><xref linkend="internals2.opcodes.begin-silence"/></entry><entry>yes</entry></row>
|
|
<row><entry>58</entry><entry><xref linkend="internals2.opcodes.end-silence"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>59</entry><entry><xref linkend="internals2.opcodes.init-fcall-by-name"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row><entry>60</entry><entry><xref linkend="internals2.opcodes.do-fcall"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>61</entry><entry><xref linkend="internals2.opcodes.do-fcall-by-name"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row><entry>62</entry><entry><xref linkend="internals2.opcodes.return"/></entry><entry>yes</entry></row>
|
|
<row><entry>63</entry><entry><xref linkend="internals2.opcodes.recv"/></entry><entry>yes</entry></row>
|
|
<row><entry>64</entry><entry><xref linkend="internals2.opcodes.recv-init"/></entry><entry>yes</entry></row>
|
|
<row><entry>65</entry><entry><xref linkend="internals2.opcodes.send-val"/></entry><entry>yes</entry></row>
|
|
<row><entry>66</entry><entry><xref linkend="internals2.opcodes.send-var"/></entry><entry>yes</entry></row>
|
|
<row><entry>67</entry><entry><xref linkend="internals2.opcodes.send-ref"/></entry><entry>yes</entry></row>
|
|
<row><entry>68</entry><entry><xref linkend="internals2.opcodes.new"/></entry><entry>yes</entry></row>
|
|
<row><entry>69</entry><entry>not documented</entry><entry>no</entry></row>
|
|
<row><entry>70</entry><entry><xref linkend="internals2.opcodes.free"/></entry><entry>yes</entry></row>
|
|
<row><entry>71</entry><entry><xref linkend="internals2.opcodes.init-array"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>72</entry><entry><xref linkend="internals2.opcodes.add-array-element"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>73</entry><entry><xref linkend="internals2.opcodes.include-or-eval"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row><entry>74</entry><entry><xref linkend="internals2.opcodes.unset-var"/></entry><entry>yes</entry></row>
|
|
<row><entry>75</entry><entry><xref linkend="internals2.opcodes.unset-dim"/></entry><entry>yes</entry></row>
|
|
<row><entry>76</entry><entry><xref linkend="internals2.opcodes.unset-obj"/></entry><entry>yes</entry></row>
|
|
<row><entry>77</entry><entry><xref linkend="internals2.opcodes.fe-reset"/></entry><entry>yes</entry></row>
|
|
<row><entry>78</entry><entry><xref linkend="internals2.opcodes.fe-fetch"/></entry><entry>yes</entry></row>
|
|
<row><entry>79</entry><entry><xref linkend="internals2.opcodes.exit"/></entry><entry>yes</entry></row>
|
|
<row><entry>80</entry><entry><xref linkend="internals2.opcodes.fetch-r"/></entry><entry>yes</entry></row>
|
|
<row><entry>81</entry><entry><xref linkend="internals2.opcodes.fetch-dim-r"/></entry><entry>yes</entry></row>
|
|
<row><entry>82</entry><entry><xref linkend="internals2.opcodes.fetch-obj-r"/></entry><entry>yes</entry></row>
|
|
<row><entry>83</entry><entry><xref linkend="internals2.opcodes.fetch-w"/></entry><entry>yes</entry></row>
|
|
<row><entry>84</entry><entry><xref linkend="internals2.opcodes.fetch-dim-w"/></entry><entry>yes</entry></row>
|
|
<row><entry>85</entry><entry><xref linkend="internals2.opcodes.fetch-obj-w"/></entry><entry>yes</entry></row>
|
|
<row><entry>86</entry><entry><xref linkend="internals2.opcodes.fetch-rw"/></entry><entry>yes</entry></row>
|
|
<row><entry>87</entry><entry><xref linkend="internals2.opcodes.fetch-dim-rw"/></entry><entry>yes</entry></row>
|
|
<row><entry>88</entry><entry><xref linkend="internals2.opcodes.fetch-obj-rw"/></entry><entry>yes</entry></row>
|
|
<row><entry>89</entry><entry><xref linkend="internals2.opcodes.fetch-is"/></entry><entry>yes</entry></row>
|
|
<row><entry>90</entry><entry><xref linkend="internals2.opcodes.fetch-dim-is"/></entry><entry>no</entry></row>
|
|
<row><entry>91</entry><entry><xref linkend="internals2.opcodes.fetch-obj-is"/></entry><entry>no</entry></row>
|
|
<row>
|
|
<entry>92</entry><entry><xref linkend="internals2.opcodes.fetch-func-arg"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>93</entry><entry><xref linkend="internals2.opcodes.fetch-dim-func-arg"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>94</entry><entry><xref linkend="internals2.opcodes.fetch-obj-func-arg"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row><entry>95</entry><entry><xref linkend="internals2.opcodes.fetch-unset"/></entry><entry>no</entry></row>
|
|
<row>
|
|
<entry>96</entry><entry><xref linkend="internals2.opcodes.fetch-dim-unset"/></entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>97</entry><entry><xref linkend="internals2.opcodes.fetch-obj-unset"/></entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>98</entry><entry><xref linkend="internals2.opcodes.fetch-dim-tmp-var"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>99</entry><entry><xref linkend="internals2.opcodes.fetch-constant"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>100</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row><entry>101</entry><entry><xref linkend="internals2.opcodes.ext-stmt"/></entry><entry>no</entry></row>
|
|
<row>
|
|
<entry>102</entry><entry><xref linkend="internals2.opcodes.ext-fcall-begin"/></entry><entry>no</entry>
|
|
</row>
|
|
<row><entry>103</entry><entry><xref linkend="internals2.opcodes.ext-fcall-end"/></entry><entry>no</entry></row>
|
|
<row><entry>104</entry><entry><xref linkend="internals2.opcodes.ext-nop"/></entry><entry>no</entry></row>
|
|
<row><entry>105</entry><entry><xref linkend="internals2.opcodes.ticks"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>106</entry><entry><xref linkend="internals2.opcodes.send-var-no-ref"/></entry><entry>no</entry>
|
|
</row>
|
|
<row><entry>107</entry><entry><xref linkend="internals2.opcodes.catch"/></entry><entry>yes</entry></row>
|
|
<row><entry>108</entry><entry><xref linkend="internals2.opcodes.throw"/></entry><entry>yes</entry></row>
|
|
<row><entry>109</entry><entry><xref linkend="internals2.opcodes.fetch-class"/></entry><entry>yes</entry></row>
|
|
<row><entry>110</entry><entry><xref linkend="internals2.opcodes.clone"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>111</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>112</entry><entry><xref linkend="internals2.opcodes.init-method-call"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>113</entry>
|
|
<entry><xref linkend="internals2.opcodes.init-static-method-call"/></entry>
|
|
<entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>114</entry><entry><xref linkend="internals2.opcodes.isset-isempty-var"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>115</entry><entry><xref linkend="internals2.opcodes.isset-isempty-dim-obj"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>116</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>117</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>118</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>119</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>120</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>121</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>122</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>123</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>124</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>125</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>126</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>127</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>128</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>129</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>130</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>131</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row><entry>132</entry><entry><xref linkend="internals2.opcodes.pre-inc-obj"/></entry><entry>yes</entry></row>
|
|
<row><entry>133</entry><entry><xref linkend="internals2.opcodes.pre-dec-obj"/></entry><entry>yes</entry></row>
|
|
<row><entry>134</entry><entry><xref linkend="internals2.opcodes.post-inc-obj"/></entry><entry>yes</entry></row>
|
|
<row><entry>135</entry><entry><xref linkend="internals2.opcodes.post-dec-obj"/></entry><entry>yes</entry></row>
|
|
<row><entry>136</entry><entry><xref linkend="internals2.opcodes.assign-obj"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>137</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row><entry>138</entry><entry><xref linkend="internals2.opcodes.instanceof"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>139</entry><entry><xref linkend="internals2.opcodes.declare-class"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>140</entry>
|
|
<entry><xref linkend="internals2.opcodes.declare-inherited-class"/></entry>
|
|
<entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>141</entry><entry><xref linkend="internals2.opcodes.declare-function"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>142</entry><entry><xref linkend="internals2.opcodes.raise-abstract-error"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>143</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row><entry>144</entry><entry><xref linkend="internals2.opcodes.add-interface"/></entry><entry>no</entry></row>
|
|
<row>
|
|
<entry>145</entry><entry>not documented</entry><entry>no</entry>
|
|
</row>
|
|
<row>
|
|
<entry>146</entry><entry><xref linkend="internals2.opcodes.verify-abstract-class"/></entry><entry>no</entry>
|
|
</row>
|
|
<row><entry>147</entry><entry><xref linkend="internals2.opcodes.assign-dim"/></entry><entry>yes</entry></row>
|
|
<row>
|
|
<entry>148</entry><entry><xref linkend="internals2.opcodes.isset-isempty-prop-obj"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row>
|
|
<entry>149</entry><entry><xref linkend="internals2.opcodes.handle-exception"/></entry><entry>yes</entry>
|
|
</row>
|
|
<row><entry>150</entry><entry><xref linkend="internals2.opcodes.user-opcode"/></entry><entry>no</entry></row>
|
|
<row><entry>152</entry><entry>ZEND_JMP_SET</entry><entry>no</entry></row>
|
|
<row><entry>153</entry><entry>ZEND_DECLARE_LAMBDA_FUNCTION</entry><entry>no</entry></row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</section>
|
|
|
|
<section xml:id="internals2.opcodes.add">
|
|
<title>ADD</title>
|
|
<section xml:id="internals2.opcodes.add.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Adds "value1" to "value2" and stores the result into "result".
|
|
* opcode number: 1
|
|
*/
|
|
echo 1 + 2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ADD</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-array-element">
|
|
<title>ADD_ARRAY_ELEMENT</title>
|
|
<section xml:id="internals2.opcodes.add-array-element.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Add elem-value as an element to array-value
|
|
* opcode number: 72
|
|
*/
|
|
$a = array(1,2,3);
|
|
print_r($a);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-array-element.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'print_r'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>6</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-char">
|
|
<title>ADD_CHAR</title>
|
|
<section xml:id="internals2.opcodes.add-char.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* add character value2 to string value1 and store in result
|
|
* opcode number: 54
|
|
*/
|
|
echo "hello\ world";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-char.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'hello%5C+world'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-interface">
|
|
<title>ADD_INTERFACE</title>
|
|
<section xml:id="internals2.opcodes.add-interface.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 144
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-string">
|
|
<title>ADD_STRING</title>
|
|
<section xml:id="internals2.opcodes.add-string.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* add string value2 to string value2 and store in result
|
|
* opcode number: 55
|
|
*/
|
|
echo "hello$a world";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-string.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>'hello'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>~0,!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>~0,'+world'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-var">
|
|
<title>ADD_VAR</title>
|
|
<section xml:id="internals2.opcodes.add-var.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* add contents of variable in value2 to string value1 and store in result
|
|
* opcode number: 56
|
|
*/
|
|
echo "hello$a world";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.add-var.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>'hello'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>~0,!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>~0,'+world'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign">
|
|
<title>ASSIGN</title>
|
|
<section xml:id="internals2.opcodes.assign.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* assigns value1 to result
|
|
* opcode number: 38
|
|
*/
|
|
$a=1;
|
|
$a='a';
|
|
$a=new A();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'a'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>2</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:2</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>:2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>6</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-add">
|
|
<title>ASSIGN_ADD</title>
|
|
<section xml:id="internals2.opcodes.assign-add.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Add value1 to value2 and store in variable indicated by value1
|
|
* opcode number: 23
|
|
*/
|
|
$a+=3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-add.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_ADD</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-bw-and">
|
|
<title>ASSIGN_BW_AND</title>
|
|
<section xml:id="internals2.opcodes.assign-bw-and.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Performs binary AND on result and value1 and stores in variable indicated by result.
|
|
* opcode number: 32
|
|
*/
|
|
$a &= 64;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-bw-and.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_BW_AND</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,64</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-bw-or">
|
|
<title>ASSIGN_BW_OR</title>
|
|
<section xml:id="internals2.opcodes.assign-bw-or.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Performs binary OR on result and value1 and stores in variable indicated by result.
|
|
* opcode number: 31
|
|
*/
|
|
$a |= 64;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-bw-or.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_BW_OR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,64</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-bw-xor">
|
|
<title>ASSIGN_BW_XOR</title>
|
|
<section xml:id="internals2.opcodes.assign-bw-xor.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Performs binary XOR on result and value1and stores in variable indicated by result.
|
|
* opcode number: 33
|
|
*/
|
|
$a ^= 64;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-bw-xor.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_BW_XOR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,64</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-concat">
|
|
<title>ASSIGN_CONCAT</title>
|
|
<section xml:id="internals2.opcodes.assign-concat.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Concats string values result and value1 and store in variable indicated by result
|
|
* opcode number: 30
|
|
*/
|
|
$a .= 'z';
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-concat.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_CONCAT</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'z'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-dim">
|
|
<title>ASSIGN_DIM</title>
|
|
<section xml:id="internals2.opcodes.assign-dim.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 147
|
|
*/
|
|
$b = 1;
|
|
$a[1][2] = $b;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-dim.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$b, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>FETCH_DIM_W</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>!1,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ZEND_ASSIGN_DIM</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ZEND_OP_DATA</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-div">
|
|
<title>ASSIGN_DIV</title>
|
|
<section xml:id="internals2.opcodes.assign-div.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Divide result by value1and store in variable indicated by result.
|
|
* opcode number: 26
|
|
*/
|
|
$a/=3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-div.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_DIV</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-mod">
|
|
<title>ASSIGN_MOD</title>
|
|
<section xml:id="internals2.opcodes.assign-mod.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Perform result mod value1 and store in variable indicated by result
|
|
* opcode number: 27
|
|
*/
|
|
$a %= 3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-mod.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_MOD</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-mul">
|
|
<title>ASSIGN_MUL</title>
|
|
<section xml:id="internals2.opcodes.assign-mul.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Multiply result by value1 and store in variable indicated by result
|
|
* opcode number: 25
|
|
*/
|
|
$a*=3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-mul.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_MUL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-obj">
|
|
<title>ASSIGN_OBJ</title>
|
|
<section xml:id="internals2.opcodes.assign-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 136
|
|
*/
|
|
$obj->a = $otherobj;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj, !1=$otherobj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_ASSIGN_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'a'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ZEND_OP_DATA</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-ref">
|
|
<title>ASSIGN_REF</title>
|
|
<section xml:id="internals2.opcodes.assign-ref.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* indicates that variable indicated by value1 is to be treated in the global scope for the remainder of the current scope.
|
|
* opcode number: 39
|
|
*/
|
|
global $a;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-ref.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>FETCH_W</entry><entry>globallock</entry>
|
|
<entry> </entry><entry>$0</entry>
|
|
<entry>'a'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ASSIGN_REF</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-sl">
|
|
<title>ASSIGN_SL</title>
|
|
<section xml:id="internals2.opcodes.assign-sl.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Shift result by value1 bits to left and store in variable indicated by result
|
|
* opcode number: 28
|
|
*/
|
|
$a <<= 3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-sl.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_SL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-sr">
|
|
<title>ASSIGN_SR</title>
|
|
<section xml:id="internals2.opcodes.assign-sr.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Shift result by value1 bits to right and store in variable indicated by result
|
|
* opcode number: 29
|
|
*/
|
|
$a >>= 3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-sr.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_SR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-sub">
|
|
<title>ASSIGN_SUB</title>
|
|
<section xml:id="internals2.opcodes.assign-sub.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Subtract value1 from value2 and store in variable indicated by value1
|
|
* opcode number: 24
|
|
*/
|
|
$a-=3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.assign-sub.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN_SUB</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.begin-silence">
|
|
<title>BEGIN_SILENCE</title>
|
|
<section xml:id="internals2.opcodes.begin-silence.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* prepare to perform function call without displaying error messages
|
|
* opcode number: 57
|
|
*/
|
|
/* Intentional file error */
|
|
$my_file = @file ('non_existent_file') or
|
|
die ("error:'$php_errormsg'");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.begin-silence.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$my_file, !1=$php_errormsg </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>BEGIN_SILENCE</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>SEND_VAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'non_existent_file'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'file'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>END_SILENCE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>JMPNZ_EX</entry><entry> </entry>
|
|
<entry> </entry><entry>~3</entry>
|
|
<entry>$2,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>6</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~4</entry>
|
|
<entry>'error%3A%27'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ADD_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry>~4</entry>
|
|
<entry>~4,!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>ADD_CHAR</entry><entry> </entry>
|
|
<entry> </entry><entry>~4</entry>
|
|
<entry>~4,39</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>EXIT</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>10</entry>
|
|
<entry>BOOL</entry><entry> </entry>
|
|
<entry> </entry><entry>~3</entry>
|
|
<entry>true</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>12</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bool">
|
|
<title>BOOL</title>
|
|
<section xml:id="internals2.opcodes.bool.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* convert value1 to boolean and store in result??????????
|
|
* opcode number: 52
|
|
*/
|
|
if (1 || 2 || 1) echo "foo";
|
|
//$a = true;
|
|
//if($a) echo "foo";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bool.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>JMPNZ_EX</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,->2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>BOOL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>JMPNZ_EX</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>~0,->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>BOOL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0,->7</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'foo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->7</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>7</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bool-not">
|
|
<title>BOOL_NOT</title>
|
|
<section xml:id="internals2.opcodes.bool-not.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Boolean (logical) not of "value"
|
|
* opcode number: 13
|
|
*/
|
|
echo !1;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bool-not.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BOOL_NOT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bool-xor">
|
|
<title>BOOL_XOR</title>
|
|
<section xml:id="internals2.opcodes.bool-xor.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Boolean (logical) xor of value1
|
|
* opcode number: 14
|
|
*/
|
|
echo 1 xor 2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bool-xor.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BOOL_XOR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.brk">
|
|
<title>BRK</title>
|
|
<section xml:id="internals2.opcodes.brk.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* ??? End of a case block exists the current switch block. Followed by JMP?
|
|
* opcode number: 50
|
|
*/
|
|
$x = 0;
|
|
while(1) {
|
|
if($x == 0) break;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.brk.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1,->7</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>2</entry>
|
|
<entry>IS_EQUAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1,->6</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>BRK</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->6</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>6</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>7</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-and">
|
|
<title>BW_AND</title>
|
|
<section xml:id="internals2.opcodes.bw-and.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Bit-wise and of value1 and value2
|
|
* opcode number: 10
|
|
*/
|
|
echo 1&2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-and.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BW_AND</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-not">
|
|
<title>BW_NOT</title>
|
|
<section xml:id="internals2.opcodes.bw-not.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Bit-wise not of "value"
|
|
* opcode number: 12
|
|
*/
|
|
echo ~15;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-not.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BW_NOT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>15</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-or">
|
|
<title>BW_OR</title>
|
|
<section xml:id="internals2.opcodes.bw-or.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Bit-wise or of value1 and value2
|
|
* opcode number: 9
|
|
*/
|
|
echo 1|2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-or.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BW_OR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-xor">
|
|
<title>BW_XOR</title>
|
|
<section xml:id="internals2.opcodes.bw-xor.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Bit-wise xor of value1 and value2
|
|
* opcode number: 11
|
|
*/
|
|
echo 1^2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.bw-xor.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BW_XOR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.case">
|
|
<title>CASE</title>
|
|
<section xml:id="internals2.opcodes.case.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Set result to true if value1 equals value2. The value2 must be a constant value?
|
|
* opcode number: 48
|
|
*/
|
|
$i=0;
|
|
switch ($i) {
|
|
case 0:
|
|
echo "i=0";
|
|
break;
|
|
case 1:
|
|
echo "i=1";
|
|
break;
|
|
case 2:
|
|
echo "i=2";
|
|
break;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.case.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$i </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>1</entry>
|
|
<entry>CASE</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1,->6</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>3</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'i%3D0'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>4</entry>
|
|
<entry>BRK</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>5</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->8</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>CASE</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry>12</entry><entry>8</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'i%3D1'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>9</entry>
|
|
<entry>BRK</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>10</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->13</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>CASE</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>!0,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>12</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1,->16</entry>
|
|
</row>
|
|
<row>
|
|
<entry>15</entry><entry>13</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'i%3D2'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>16</entry><entry>14</entry>
|
|
<entry>BRK</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>17</entry><entry>15</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->16</entry>
|
|
</row>
|
|
<row>
|
|
<entry>18</entry><entry>16</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.cast">
|
|
<title>CAST</title>
|
|
<section xml:id="internals2.opcodes.cast.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* casts value1 as type value2 (?? Not certain about arguments ??)
|
|
* opcode number: 21
|
|
*/
|
|
echo (int)1;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.cast.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>CAST</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.catch">
|
|
<title>CATCH</title>
|
|
<section xml:id="internals2.opcodes.catch.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 107
|
|
*/
|
|
try {
|
|
$error = 'Always throw this error';
|
|
throw new Exception($error);
|
|
|
|
// Code following an exception is not executed.
|
|
echo 'Never executed';
|
|
|
|
} catch (Exception $e) {
|
|
echo 'Caught exception: ', $e->getMessage(), "\n";
|
|
}
|
|
|
|
// Continue execution
|
|
echo 'Hello World';
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.catch.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$error, !1=$e </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'Always+throw+this+error'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>1</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:1</entry>
|
|
<entry>'Exception'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>:1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ZEND_THROW</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry>$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>6</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Never+executed'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>7</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->15</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:4</entry>
|
|
<entry>'Exception'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>ZEND_CATCH</entry><entry> </entry>
|
|
<entry>15</entry><entry> </entry>
|
|
<entry>$4,!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>10</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Caught+exception%3A+'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>ZEND_INIT_METHOD_CALL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'getMessage'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>12</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>13</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$6</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>14</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'%0A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>18</entry><entry>15</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Hello+World'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>19</entry><entry>16</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.clone">
|
|
<title>CLONE</title>
|
|
<section xml:id="internals2.opcodes.clone.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 110
|
|
*/
|
|
$obj = new A();
|
|
$copy = clone $obj;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.clone.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj, !1=$copy </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ZEND_CLONE</entry><entry> </entry>
|
|
<entry> </entry><entry>$4</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>6</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.concat">
|
|
<title>CONCAT</title>
|
|
<section xml:id="internals2.opcodes.concat.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Concats string values string1 and string2
|
|
* opcode number: 8
|
|
*/
|
|
echo "hello" . "world";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.concat.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>CONCAT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>'hello','world'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.declare-class">
|
|
<title>DECLARE_CLASS</title>
|
|
<section xml:id="internals2.opcodes.declare-class.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Declare a class with the name of class-name as the implementation specified by ID.
|
|
* opcode number: 139
|
|
*/
|
|
class A {
|
|
function methodA(){
|
|
echo "hello world";
|
|
}
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.declare-class.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: methodA</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8</entry><entry>0</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'hello+world'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.declare-function">
|
|
<title>DECLARE_FUNCTION</title>
|
|
<section xml:id="internals2.opcodes.declare-function.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 141
|
|
*/
|
|
class A{
|
|
function funcA(){
|
|
}
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.declare-function.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: funcA</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8</entry><entry>0</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.declare-inherited-class">
|
|
<title>DECLARE_INHERITED_CLASS</title>
|
|
<section xml:id="internals2.opcodes.declare-inherited-class.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 140
|
|
*/
|
|
if($b){
|
|
class Foo {
|
|
public static $my_static = 'foo';
|
|
public function staticValue() {
|
|
return self::$my_static;
|
|
}
|
|
}
|
|
|
|
class Bar extends Foo {
|
|
public function fooStatic() {
|
|
echo parent::$my_static;
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.declare-inherited-class.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$b </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>ZEND_DECLARE_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>$0</entry>
|
|
<entry>'%00foo%2Fmnt%2Fworkspace%2Fws_phpscripts%2FPHPopcodes%2Fphpsamples%2FDECLARE_INHERITED_CLASS.php0xb7be503b','foo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>2</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:1</entry>
|
|
<entry>'Foo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ZEND_DECLARE_INHERITED_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>'%00bar%2Fmnt%2Fworkspace%2Fws_phpscripts%2FPHPopcodes%2Fphpsamples%2FDECLARE_INHERITED_CLASS.php0xb7be50bc','bar'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>19</entry><entry>4</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>20</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: staticValue</simpara>
|
|
<simpara>Compiled variables: !0=$my_static </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>10</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FETCH_R</entry><entry>staticmember</entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>'my_static'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>3</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: fooStatic</simpara>
|
|
<simpara>Compiled variables: !0=$my_static </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>16</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FETCH_R</entry><entry>staticmember</entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>'my_static'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>17</entry><entry>3</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.div">
|
|
<title>DIV</title>
|
|
<section xml:id="internals2.opcodes.div.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Divides "value1" by "value2" and stores the result into "result".
|
|
* opcode number: 4
|
|
*/
|
|
echo 6/3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.div.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>DIV</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>6,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.do-fcall">
|
|
<title>DO_FCALL</title>
|
|
<section xml:id="internals2.opcodes.do-fcall.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Call a function. Following multiple SEND_VAL, SEND_VAR or SEND_REF.
|
|
* opcode number: 60
|
|
*/
|
|
$a = phpinfo();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.do-fcall.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry>'phpinfo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.do-fcall-by-name">
|
|
<title>DO_FCALL_BY_NAME</title>
|
|
<section xml:id="internals2.opcodes.do-fcall-by-name.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Call a function by name. Following INIT_FCALL_BY_NAME and multiple SEND_VAL, SEND_VAR or SEND_REF.
|
|
* opcode number: 61
|
|
*/
|
|
$x = 'phpinfo';
|
|
$a = $x();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.do-fcall-by-name.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'phpinfo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>INIT_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.echo">
|
|
<title>ECHO</title>
|
|
<section xml:id="internals2.opcodes.echo.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Dump text
|
|
* opcode number: 40
|
|
*/
|
|
echo "hello world";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.echo.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'hello+world'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.end-silence">
|
|
<title>END_SILENCE</title>
|
|
<section xml:id="internals2.opcodes.end-silence.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* no longer surpress error messages
|
|
* opcode number: 58
|
|
*/
|
|
$my_file = @file ('non_existent_file') or
|
|
die ("error:'$php_errormsg'");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.end-silence.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$my_file, !1=$php_errormsg </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BEGIN_SILENCE</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>SEND_VAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'non_existent_file'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'file'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>END_SILENCE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>JMPNZ_EX</entry><entry> </entry>
|
|
<entry> </entry><entry>~3</entry>
|
|
<entry>$2,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>6</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~4</entry>
|
|
<entry>'error%3A%27'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ADD_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry>~4</entry>
|
|
<entry>~4,!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>ADD_CHAR</entry><entry> </entry>
|
|
<entry> </entry><entry>~4</entry>
|
|
<entry>~4,39</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>EXIT</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>10</entry>
|
|
<entry>BOOL</entry><entry> </entry>
|
|
<entry> </entry><entry>~3</entry>
|
|
<entry>true</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>12</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.exit">
|
|
<title>EXIT</title>
|
|
<section xml:id="internals2.opcodes.exit.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Exit running after dumping "message".
|
|
* opcode number: 79
|
|
*/
|
|
die("foobar");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.exit.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>EXIT</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'foobar'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.ext-fcall-begin">
|
|
<title>EXT_FCALL_BEGIN</title>
|
|
<section xml:id="internals2.opcodes.ext-fcall-begin.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 102
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.ext-fcall-end">
|
|
<title>EXT_FCALL_END</title>
|
|
<section xml:id="internals2.opcodes.ext-fcall-end.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 103
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.ext-nop">
|
|
<title>EXT_NOP</title>
|
|
<section xml:id="internals2.opcodes.ext-nop.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 104
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.ext-stmt">
|
|
<title>EXT_STMT</title>
|
|
<section xml:id="internals2.opcodes.ext-stmt.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 101
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-class">
|
|
<title>FETCH_CLASS</title>
|
|
<section xml:id="internals2.opcodes.fetch-class.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 109
|
|
*/
|
|
$obj = new A();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-class.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-constant">
|
|
<title>FETCH_CONSTANT</title>
|
|
<section xml:id="internals2.opcodes.fetch-constant.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the constant value bound to the specified name (name) and stores it into a variable (result).
|
|
* opcode number: 99
|
|
*/
|
|
define("FOO", "something");
|
|
echo FOO;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-constant.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>SEND_VAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'FOO'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>SEND_VAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'something'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>2</entry><entry> </entry>
|
|
<entry>'define'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>3</entry>
|
|
<entry>FETCH_CONSTANT</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>'FOO'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-func-arg">
|
|
<title>FETCH_DIM_FUNC_ARG</title>
|
|
<section xml:id="internals2.opcodes.fetch-dim-func-arg.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 93
|
|
*/
|
|
|
|
function foo(&$x)
|
|
{
|
|
print($x);
|
|
}
|
|
|
|
$x = array(0, 1, 2, 3, 4, 5);
|
|
$z = "foo";
|
|
|
|
$z($x[0]);
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-func-arg.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$z </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>12</entry><entry>1</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>5</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>8</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'foo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>15</entry><entry>9</entry>
|
|
<entry>INIT_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>10</entry>
|
|
<entry>FETCH_DIM_FUNC_ARG</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>12</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>17</entry><entry>13</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: foo</simpara>
|
|
<simpara>Compiled variables: !0=$x </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>RECV</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>1</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>3</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-is">
|
|
<title>FETCH_DIM_IS</title>
|
|
<section xml:id="internals2.opcodes.fetch-dim-is.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 90
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-r">
|
|
<title>FETCH_DIM_R</title>
|
|
<section xml:id="internals2.opcodes.fetch-dim-r.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the value of the element at "index" in "array-value" to store it in "result". Read-only?
|
|
* opcode number: 81
|
|
*/
|
|
$x = array(1,2,3);
|
|
$a = 'x';
|
|
echo $$a[0];
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-r.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>FETCH_DIM_R</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>!1,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>FETCH_R</entry><entry>local</entry>
|
|
<entry> </entry><entry>$4</entry>
|
|
<entry>$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-rw">
|
|
<title>FETCH_DIM_RW</title>
|
|
<section xml:id="internals2.opcodes.fetch-dim-rw.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the value of the element at "index" in "array-value" to store it in "result".
|
|
* opcode number: 87
|
|
*/
|
|
$x = array(1,2,3);
|
|
$a = 'x';
|
|
$$a[0]++;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-rw.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>FETCH_DIM_R</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>!1,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>FETCH_RW</entry><entry>local</entry>
|
|
<entry> </entry><entry>$4</entry>
|
|
<entry>$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>POST_INC</entry><entry> </entry>
|
|
<entry> </entry><entry>~5</entry>
|
|
<entry>$4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>9</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-tmp-var">
|
|
<title>FETCH_DIM_TMP_VAR</title>
|
|
<section xml:id="internals2.opcodes.fetch-dim-tmp-var.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch an entry of an array from a temporal variable?
|
|
* opcode number: 98
|
|
*/
|
|
list($x) = array("X");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-tmp-var.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>'X'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FETCH_DIM_TMP_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>~0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-unset">
|
|
<title>FETCH_DIM_UNSET</title>
|
|
<section xml:id="internals2.opcodes.fetch-dim-unset.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch an entry of an array variable for the purpose of unset() operation.
|
|
* opcode number: 96
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-w">
|
|
<title>FETCH_DIM_W</title>
|
|
<section xml:id="internals2.opcodes.fetch-dim-w.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the value of the element at "index" in "array-value" to store it in "result". Write-only?
|
|
* opcode number: 84
|
|
*/
|
|
$a = 1;
|
|
while($a > 0){
|
|
$a = 0;
|
|
}
|
|
/*$input =array(1,2,3);
|
|
while (list($var,) = @each($input)){
|
|
unset($$var);
|
|
}*/
|
|
/*$a = array(1,2,3);
|
|
$x = 'a';
|
|
$$x[0] = 1;*/
|
|
|
|
/*while ($b = each($a)) {
|
|
print $b;
|
|
}*/
|
|
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-dim-w.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>IS_SMALLER</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>0,!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1,->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>4</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>23</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-func-arg">
|
|
<title>FETCH_FUNC_ARG</title>
|
|
<section xml:id="internals2.opcodes.fetch-func-arg.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 92
|
|
*/
|
|
function foo($x)
|
|
{
|
|
}
|
|
|
|
$x = 1;
|
|
$y = "x";
|
|
$z = "foo";
|
|
|
|
$z($$y);
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-func-arg.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$y, !2=$z </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>1</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>2</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>12</entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!2,'foo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>4</entry>
|
|
<entry>INIT_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>FETCH_FUNC_ARG</entry><entry>local</entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>16</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: foo</simpara>
|
|
<simpara>Compiled variables: !0=$x </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>RECV</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-is">
|
|
<title>FETCH_IS</title>
|
|
<section xml:id="internals2.opcodes.fetch-is.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the value from variable which is to be used to test if it is set or not, through isset()/isempty().
|
|
* opcode number: 89
|
|
*/
|
|
echo isset($_SESSION['userid']);
|
|
echo isset($_SESSION['userid'][1]);
|
|
echo isset($_SESSION->prop->prop);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-is.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>FETCH_IS</entry><entry> </entry>
|
|
<entry> </entry><entry>$0</entry>
|
|
<entry>'_SESSION'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ZEND_ISSET_ISEMPTY_DIM_OBJ</entry><entry> </entry>
|
|
<entry>1</entry><entry>~1</entry>
|
|
<entry>$0,'userid'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>3</entry>
|
|
<entry>FETCH_IS</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>'_SESSION'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>FETCH_DIM_IS</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>$2,'userid'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ZEND_ISSET_ISEMPTY_DIM_OBJ</entry><entry> </entry>
|
|
<entry>1</entry><entry>~4</entry>
|
|
<entry>$3,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>7</entry>
|
|
<entry>FETCH_IS</entry><entry> </entry>
|
|
<entry> </entry><entry>$5</entry>
|
|
<entry>'_SESSION'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>FETCH_OBJ_IS</entry><entry> </entry>
|
|
<entry> </entry><entry>$6</entry>
|
|
<entry>$5,'prop'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>ZEND_ISSET_ISEMPTY_PROP_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry>~7</entry>
|
|
<entry>$6,'prop'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>10</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~7</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>11</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-func-arg">
|
|
<title>FETCH_OBJ_FUNC_ARG</title>
|
|
<section xml:id="internals2.opcodes.fetch-obj-func-arg.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 94
|
|
*/
|
|
include './classA.php';
|
|
|
|
function foo(&$x)
|
|
{
|
|
print($x);
|
|
}
|
|
|
|
$z = "foo";
|
|
|
|
$obj = new A();
|
|
print $obj->num;
|
|
$z($obj->num);
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-func-arg.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$z, !1=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INCLUDE_OR_EVAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'.%2FclassA.php',INCLUDE</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>1</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>2</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'foo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>15</entry><entry>3</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:2</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>:2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>16</entry><entry>7</entry>
|
|
<entry>FETCH_OBJ_R</entry><entry> </entry>
|
|
<entry> </entry><entry>$6</entry>
|
|
<entry>!1,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~7</entry>
|
|
<entry>$6</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~7</entry>
|
|
</row>
|
|
<row>
|
|
<entry>17</entry><entry>10</entry>
|
|
<entry>INIT_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>FETCH_OBJ_FUNC_ARG</entry><entry> </entry>
|
|
<entry> </entry><entry>$8</entry>
|
|
<entry>!1,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>12</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$8</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>13</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>19</entry><entry>14</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: foo</simpara>
|
|
<simpara>Compiled variables: !0=$x </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8</entry><entry>0</entry>
|
|
<entry>RECV</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>1</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>3</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: foo</simpara>
|
|
<simpara>Compiled variables: !0=$x </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8</entry><entry>0</entry>
|
|
<entry>RECV</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>1</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>3</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-is">
|
|
<title>FETCH_OBJ_IS</title>
|
|
<section xml:id="internals2.opcodes.fetch-obj-is.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 91
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-r">
|
|
<title>FETCH_OBJ_R</title>
|
|
<section xml:id="internals2.opcodes.fetch-obj-r.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the "prop-name" property value of this object. Read-only?
|
|
* opcode number: 82
|
|
*/
|
|
$x = new A();
|
|
$a = 'x';
|
|
echo $$a->num;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-r.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>FETCH_R</entry><entry>local</entry>
|
|
<entry> </entry><entry>$5</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>FETCH_OBJ_R</entry><entry> </entry>
|
|
<entry> </entry><entry>$6</entry>
|
|
<entry>$5,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$6</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-rw">
|
|
<title>FETCH_OBJ_RW</title>
|
|
<section xml:id="internals2.opcodes.fetch-obj-rw.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the "prop-name" property value of this object.
|
|
* opcode number: 88
|
|
*/
|
|
$x = new A();
|
|
$a = 'x';
|
|
$$a->num++;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-rw.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>FETCH_RW</entry><entry>local</entry>
|
|
<entry> </entry><entry>$5</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ZEND_POST_INC_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry>~7</entry>
|
|
<entry>$5,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~7</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-unset">
|
|
<title>FETCH_OBJ_UNSET</title>
|
|
<section xml:id="internals2.opcodes.fetch-obj-unset.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch a property of an object variable for the purpose of unset() operation.
|
|
* opcode number: 97
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-w">
|
|
<title>FETCH_OBJ_W</title>
|
|
<section xml:id="internals2.opcodes.fetch-obj-w.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the "prop-name" property value of this object. Write-only?
|
|
* opcode number: 85
|
|
*/
|
|
$x = new A();
|
|
$a = 'x';
|
|
$$a->num = 1;;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-obj-w.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>FETCH_W</entry><entry>local</entry>
|
|
<entry> </entry><entry>$5</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ZEND_ASSIGN_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$5,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ZEND_OP_DATA</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-r">
|
|
<title>FETCH_R</title>
|
|
<section xml:id="internals2.opcodes.fetch-r.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the value of the varible of "name" to assign it to a variable? Read-only?
|
|
* opcode number: 80
|
|
*/
|
|
$x = 1;
|
|
$a = 'x';
|
|
echo $$a;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-r.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>2</entry>
|
|
<entry>FETCH_R</entry><entry>local</entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-rw">
|
|
<title>FETCH_RW</title>
|
|
<section xml:id="internals2.opcodes.fetch-rw.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the value of the varible of "name" to assign it to a variable?
|
|
* opcode number: 86
|
|
*/
|
|
$x = 1;
|
|
$a = 'x';
|
|
$$a++;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-rw.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>2</entry>
|
|
<entry>FETCH_RW</entry><entry>local</entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>POST_INC</entry><entry> </entry>
|
|
<entry> </entry><entry>~3</entry>
|
|
<entry>$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-unset">
|
|
<title>FETCH_UNSET</title>
|
|
<section xml:id="internals2.opcodes.fetch-unset.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch a variable for the purpose of unset() operation.
|
|
* opcode number: 95
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-w">
|
|
<title>FETCH_W</title>
|
|
<section xml:id="internals2.opcodes.fetch-w.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch the value of the varible of "name" to assign it to a variable? Write-only?
|
|
* opcode number: 83
|
|
*/
|
|
$x = 1;
|
|
$a = 'x';
|
|
$$a = 2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fetch-w.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>2</entry>
|
|
<entry>FETCH_W</entry><entry>local</entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$2,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fe-fetch">
|
|
<title>FE_FETCH</title>
|
|
<section xml:id="internals2.opcodes.fe-fetch.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Fetch an element from iterator. If no element is available, jump to address. Followed by OP_DATA?
|
|
* opcode number: 78
|
|
*/
|
|
$a = array(1,2,3);
|
|
foreach($a as $num){
|
|
print $num;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fe-fetch.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a, !1=$num </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>FE_RESET</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!0,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>FE_FETCH</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>$2,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ZEND_OP_DATA</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>8</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~5</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>10</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>SWITCH_FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>12</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fe-reset">
|
|
<title>FE_RESET</title>
|
|
<section xml:id="internals2.opcodes.fe-reset.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Initialize an iterator on array-value. If the array is empty, jump to address. Followed by FE_FETCH.
|
|
* opcode number: 77
|
|
*/
|
|
$a = array(1,2,3);
|
|
foreach($a as $num){
|
|
print $num;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.fe-reset.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a, !1=$num </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>FE_RESET</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!0,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>FE_FETCH</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>$2,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ZEND_OP_DATA</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>8</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~5</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>10</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>SWITCH_FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>12</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.free">
|
|
<title>FREE</title>
|
|
<section xml:id="internals2.opcodes.free.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Release the allocated space of the value.
|
|
* opcode number: 70
|
|
*/
|
|
print "Hello World";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.free.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>'Hello+World'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.handle-exception">
|
|
<title>HANDLE_EXCEPTION</title>
|
|
<section xml:id="internals2.opcodes.handle-exception.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 149
|
|
*/
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.handle-exception.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.include-or-eval">
|
|
<title>INCLUDE_OR_EVAL</title>
|
|
<section xml:id="internals2.opcodes.include-or-eval.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Include the file specified by filename and eval it.
|
|
* opcode number: 73
|
|
*/
|
|
include("test.php");
|
|
eval("test.php");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.include-or-eval.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INCLUDE_OR_EVAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'test.php',INCLUDE</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>INCLUDE_OR_EVAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'test.php',EVAL</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>2</entry><entry>0</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry>'phpinfo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>3</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-array">
|
|
<title>INIT_ARRAY</title>
|
|
<section xml:id="internals2.opcodes.init-array.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Allocate a new array with elem-value as the first element of the array. Followed by ADD_ARRAY_ELEMENT.
|
|
* opcode number: 71
|
|
*/
|
|
$a = array(1,2,3);
|
|
print_r($a);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-array.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'print_r'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>6</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-fcall-by-name">
|
|
<title>INIT_FCALL_BY_NAME</title>
|
|
<section xml:id="internals2.opcodes.init-fcall-by-name.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* prepare for a function call to function value1
|
|
* opcode number: 59
|
|
*/
|
|
$x = 'phpinfo';
|
|
$a = $x();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-fcall-by-name.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'phpinfo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>INIT_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-method-call">
|
|
<title>INIT_METHOD_CALL</title>
|
|
<section xml:id="internals2.opcodes.init-method-call.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Prepare for a method call. Followed by DO_FCALL.
|
|
* opcode number: 112
|
|
*/
|
|
class A {
|
|
var $num;
|
|
function incrementNum(){
|
|
$num++;
|
|
}
|
|
}
|
|
|
|
$obj = new A();
|
|
$obj->incrementNum();
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-method-call.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>1</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:1</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>:1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>5</entry>
|
|
<entry>ZEND_INIT_METHOD_CALL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'incrementNum'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>16</entry><entry>7</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: incrementNum</simpara>
|
|
<simpara>Compiled variables: !0=$num </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>9</entry><entry>0</entry>
|
|
<entry>POST_INC</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-static-method-call">
|
|
<title>INIT_STATIC_METHOD_CALL</title>
|
|
<section xml:id="internals2.opcodes.init-static-method-call.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 113
|
|
*/
|
|
class Foo {
|
|
public static function aStaticMethod() {
|
|
echo "hello world\n";
|
|
}
|
|
}
|
|
|
|
Foo::aStaticMethod();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-static-method-call.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>12</entry><entry>1</entry>
|
|
<entry>ZEND_INIT_STATIC_METHOD_CALL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Foo','aStaticMethod'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ZEND_OP_DATA</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'foo%3A%3Aastaticmethod'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: aStaticMethod</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8</entry><entry>0</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'hello+world%0A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-string">
|
|
<title>INIT_STRING</title>
|
|
<section xml:id="internals2.opcodes.init-string.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* appears to create a string variable in result
|
|
* opcode number: 53
|
|
*/
|
|
echo "hello$a world";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.init-string.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>'hello'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>~0,!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_STRING</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>~0,'+world'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.instanceof">
|
|
<title>INSTANCEOF</title>
|
|
<section xml:id="internals2.opcodes.instanceof.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 138
|
|
*/
|
|
$obj = new A();
|
|
|
|
if ($obj instanceof A) {
|
|
echo 'A';
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.instanceof.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>4</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:4</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ZEND_INSTANCEOF</entry><entry> </entry>
|
|
<entry> </entry><entry>~5</entry>
|
|
<entry>!0,$4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~5,->9</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>7</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>8</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->9</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>9</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.isset-isempty-dim-obj">
|
|
<title>ISSET_ISEMPTY_DIM_OBJ</title>
|
|
<section xml:id="internals2.opcodes.isset-isempty-dim-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Tests if the entry of an array is set or not.
|
|
* opcode number: 115
|
|
*/
|
|
if(isset($a[0])) return 0;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.isset-isempty-dim-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_ISSET_ISEMPTY_DIM_OBJ</entry><entry> </entry>
|
|
<entry>1</entry><entry>~0</entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0,->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.isset-isempty-prop-obj">
|
|
<title>ISSET_ISEMPTY_PROP_OBJ</title>
|
|
<section xml:id="internals2.opcodes.isset-isempty-prop-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 148
|
|
*/
|
|
$obj = new A();
|
|
if(empty($obj->num)) return 0;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.isset-isempty-prop-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ZEND_ISSET_ISEMPTY_PROP_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry>~4</entry>
|
|
<entry>!0,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~4,->8</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->8</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.isset-isempty-var">
|
|
<title>ISSET_ISEMPTY_VAR</title>
|
|
<section xml:id="internals2.opcodes.isset-isempty-var.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Tests if the value of a variable is set or not.
|
|
* opcode number: 114
|
|
*/
|
|
if(isset($a)){ return 0;}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.isset-isempty-var.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_ISSET_ISEMPTY_VAR</entry><entry> </entry>
|
|
<entry>5</entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0,->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-equal">
|
|
<title>IS_EQUAL</title>
|
|
<section xml:id="internals2.opcodes.is-equal.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* compares if value1 and value2 are equal
|
|
* opcode number: 17
|
|
*/
|
|
echo (1 == 1);
|
|
echo (1 == 'c');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-equal.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>IS_EQUAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>IS_EQUAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>1,'c'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-identical">
|
|
<title>IS_IDENTICAL</title>
|
|
<section xml:id="internals2.opcodes.is-identical.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Compares value1 and value2 to see if they are equal AND have the same type
|
|
* opcode number: 15
|
|
*/
|
|
echo (1===1);
|
|
echo (1==='a');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-identical.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>IS_IDENTICAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>IS_IDENTICAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>1,'a'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-not-equal">
|
|
<title>IS_NOT_EQUAL</title>
|
|
<section xml:id="internals2.opcodes.is-not-equal.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* compares if value1 and value2 are not equal
|
|
* opcode number: 18
|
|
*/
|
|
echo (1 != 1);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-not-equal.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>IS_NOT_EQUAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-not-identical">
|
|
<title>IS_NOT_IDENTICAL</title>
|
|
<section xml:id="internals2.opcodes.is-not-identical.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* compares value1 and value2 to see if they are unequal or of different types
|
|
* opcode number: 16
|
|
*/
|
|
echo (1 !== 1);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-not-identical.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>IS_NOT_IDENTICAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-smaller">
|
|
<title>IS_SMALLER</title>
|
|
<section xml:id="internals2.opcodes.is-smaller.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* compares if value1 is less than value2
|
|
* opcode number: 19
|
|
*/
|
|
echo (1 < 2);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-smaller.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>IS_SMALLER</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-smaller-or-equal">
|
|
<title>IS_SMALLER_OR_EQUAL</title>
|
|
<section xml:id="internals2.opcodes.is-smaller-or-equal.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* compares if value1 is less than or equal to value2
|
|
* opcode number: 20
|
|
*/
|
|
echo (1 >= 2);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.is-smaller-or-equal.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>IS_SMALLER_OR_EQUAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpnz">
|
|
<title>JMPNZ</title>
|
|
<section xml:id="internals2.opcodes.jmpnz.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Jump to the address if the value is not zero
|
|
* opcode number: 44
|
|
*/
|
|
for($i=0; $i<3; $i++){
|
|
echo "hi";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpnz.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$i </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>IS_SMALLER</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>JMPZNZ</entry><entry> </entry>
|
|
<entry>6</entry><entry> </entry>
|
|
<entry>~1,->8</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>POST_INC</entry><entry> </entry>
|
|
<entry> </entry><entry>~2</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>6</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'hi'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>7</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpnz-ex">
|
|
<title>JMPNZ_EX</title>
|
|
<section xml:id="internals2.opcodes.jmpnz-ex.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Jump to the address if the xor of value1 and value2 is zero .. ???
|
|
* opcode number: 47
|
|
*/
|
|
if(1^2) return;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpnz-ex.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BW_XOR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0,->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpz">
|
|
<title>JMPZ</title>
|
|
<section xml:id="internals2.opcodes.jmpz.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Jump to the address if the value is zero
|
|
* opcode number: 43
|
|
*/
|
|
if($a != 0) echo "foo";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpz.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>IS_NOT_EQUAL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0,->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'foo'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpznz">
|
|
<title>JMPZNZ</title>
|
|
<section xml:id="internals2.opcodes.jmpznz.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Jump to the address if the value is .. ???
|
|
* opcode number: 45
|
|
*/
|
|
for($i=0; $i<3; $i++){
|
|
echo "hi";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpznz.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$i </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>IS_SMALLER</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>!0,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>JMPZNZ</entry><entry> </entry>
|
|
<entry>6</entry><entry> </entry>
|
|
<entry>~1,->8</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>POST_INC</entry><entry> </entry>
|
|
<entry> </entry><entry>~2</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>6</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'hi'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>7</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>8</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpz-ex">
|
|
<title>JMPZ_EX</title>
|
|
<section xml:id="internals2.opcodes.jmpz-ex.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Jump to the address if the xor of value1 and value2 is zero .. ???
|
|
* opcode number: 46
|
|
*/
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.jmpz-ex.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.mod">
|
|
<title>MOD</title>
|
|
<section xml:id="internals2.opcodes.mod.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Makes the value of "result" congruent to "value1" modulo "value2".
|
|
* opcode number: 5
|
|
*/
|
|
echo 6 % 3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.mod.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>MOD</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>6,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.mul">
|
|
<title>MUL</title>
|
|
<section xml:id="internals2.opcodes.mul.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Multiplys "value1" by "value2" and stores the result into "result".
|
|
* opcode number: 3
|
|
*/
|
|
echo 2*3;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.mul.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>MUL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2,3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.new">
|
|
<title>NEW</title>
|
|
<section xml:id="internals2.opcodes.new.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Construct an instance of "type" and store the reference to the object into "result".
|
|
* opcode number: 68
|
|
*/
|
|
$obj = new A();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.new.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.nop">
|
|
<title>NOP</title>
|
|
<section xml:id="internals2.opcodes.nop.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* no operation
|
|
* opcode number: 0
|
|
*/
|
|
function A(){};
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.nop.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: A</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-dec">
|
|
<title>POST_DEC</title>
|
|
<section xml:id="internals2.opcodes.post-dec.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* decrements variable indicated by value1 by 1 (after performing other operations) and stores in result
|
|
* opcode number: 37
|
|
*/
|
|
$a--;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-dec.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>POST_DEC</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-dec-obj">
|
|
<title>POST_DEC_OBJ</title>
|
|
<section xml:id="internals2.opcodes.post-dec-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 135
|
|
*/
|
|
$obj = new A();
|
|
$obj->num--;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-dec-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ZEND_POST_DEC_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry>~5</entry>
|
|
<entry>!0,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>6</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-inc">
|
|
<title>POST_INC</title>
|
|
<section xml:id="internals2.opcodes.post-inc.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* increments variable indicated by value1 by 1 (after performing other operations) and stores in result
|
|
* opcode number: 36
|
|
*/
|
|
$a++;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-inc.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>POST_INC</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-inc-obj">
|
|
<title>POST_INC_OBJ</title>
|
|
<section xml:id="internals2.opcodes.post-inc-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Increment the property value specified by prop-name and store the original value into result.
|
|
* opcode number: 134
|
|
*/
|
|
$obj = new A();
|
|
$obj->num++;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.post-inc-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ZEND_POST_INC_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry>~5</entry>
|
|
<entry>!0,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>6</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-dec">
|
|
<title>PRE_DEC</title>
|
|
<section xml:id="internals2.opcodes.pre-dec.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* decrements variable indicated by value1 by 1 (before performing other operations) and stores in results
|
|
* opcode number: 35
|
|
*/
|
|
--$a;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-dec.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>PRE_DEC</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-dec-obj">
|
|
<title>PRE_DEC_OBJ</title>
|
|
<section xml:id="internals2.opcodes.pre-dec-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 133
|
|
*/
|
|
$obj = new A();
|
|
--$obj->num;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-dec-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ZEND_PRE_DEC_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-inc">
|
|
<title>PRE_INC</title>
|
|
<section xml:id="internals2.opcodes.pre-inc.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* increments variable indicated by value1 by 1 (before performing other operations) and stores in result
|
|
* opcode number: 34
|
|
*/
|
|
++$a;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-inc.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>PRE_INC</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-inc-obj">
|
|
<title>PRE_INC_OBJ</title>
|
|
<section xml:id="internals2.opcodes.pre-inc-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 132
|
|
*/
|
|
$obj = new A();
|
|
++$obj->num;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.pre-inc-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>ZEND_PRE_INC_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.print">
|
|
<title>PRINT</title>
|
|
<section xml:id="internals2.opcodes.print.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 41
|
|
*/
|
|
print "Hello World";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.print.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>'Hello+World'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.qm-assign">
|
|
<title>QM_ASSIGN</title>
|
|
<section xml:id="internals2.opcodes.qm-assign.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Question Mark Assign, used twice inside a question mark assign to temporarily assign result as value1 (this is followed up with an ASSIGN bytecode)
|
|
* opcode number: 22
|
|
*/
|
|
function A(){
|
|
echo 1?2:3;
|
|
}
|
|
|
|
function B(){
|
|
$b = 0;
|
|
$a = $b > 1 ? 10: 11;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.qm-assign.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>1</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: A</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1,->3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>QM_ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->4</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>QM_ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: B</simpara>
|
|
<simpara>Compiled variables: !0=$b, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>11</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>12</entry><entry>1</entry>
|
|
<entry>IS_SMALLER</entry><entry> </entry>
|
|
<entry> </entry><entry>~1</entry>
|
|
<entry>1,!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~1,->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>QM_ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry>~2</entry>
|
|
<entry>10</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->6</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>QM_ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry>~2</entry>
|
|
<entry>11</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,~2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>7</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.raise-abstract-error">
|
|
<title>RAISE_ABSTRACT_ERROR</title>
|
|
<section xml:id="internals2.opcodes.raise-abstract-error.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 142
|
|
*/
|
|
|
|
abstract class fail {
|
|
abstract function show();
|
|
}
|
|
|
|
class pass extends fail {
|
|
function show() {
|
|
echo "Call to function show()\n";
|
|
}
|
|
}
|
|
|
|
$t2 = new pass();
|
|
$t2->show();
|
|
|
|
$t = new fail();
|
|
$t->show();
|
|
|
|
echo "Done\n"; // shouldn't be displayed
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.raise-abstract-error.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$t2, !1=$t </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>1</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>17</entry><entry>3</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:3</entry>
|
|
<entry>'pass'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$4</entry>
|
|
<entry>:3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$4</entry>
|
|
</row>
|
|
<row>
|
|
<entry>18</entry><entry>7</entry>
|
|
<entry>ZEND_INIT_METHOD_CALL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'show'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>20</entry><entry>9</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:9</entry>
|
|
<entry>'fail'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>10</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$10</entry>
|
|
<entry>:9</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>12</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$10</entry>
|
|
</row>
|
|
<row>
|
|
<entry>21</entry><entry>13</entry>
|
|
<entry>ZEND_INIT_METHOD_CALL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'show'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>14</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>23</entry><entry>15</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Done%0A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>24</entry><entry>16</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: show</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>8</entry><entry>0</entry>
|
|
<entry>ZEND_RAISE_ABSTRACT_ERROR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: show</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>13</entry><entry>0</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Call+to+function+show%28%29%0A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.recv">
|
|
<title>RECV</title>
|
|
<section xml:id="internals2.opcodes.recv.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Receive a functoin argument of "argument-number" and store the argument value into a variable of "argument-number". (e.g. $1 for 1)
|
|
* opcode number: 63
|
|
*/
|
|
function hello($a){}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.recv.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: hello</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>RECV</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.recv-init">
|
|
<title>RECV_INIT</title>
|
|
<section xml:id="internals2.opcodes.recv-init.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Initialize a function argument with "value" if not received from caller. Otherwise same as RECV.
|
|
* opcode number: 64
|
|
*/
|
|
function hello($a=5){}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.recv-init.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: hello</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>RECV_INIT</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1,5</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.return">
|
|
<title>RETURN</title>
|
|
<section xml:id="internals2.opcodes.return.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Return value from a funciton.
|
|
* opcode number: 62
|
|
*/
|
|
return 1;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.return.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.send-ref">
|
|
<title>SEND_REF</title>
|
|
<section xml:id="internals2.opcodes.send-ref.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Pass the reference value as an actual parameter to a function. DO_FCALL follows.
|
|
* opcode number: 67
|
|
*/
|
|
@each($input);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.send-ref.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>BEGIN_SILENCE</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>FETCH_W</entry><entry>local</entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>'input'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>SEND_REF</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'each'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>END_SILENCE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.send-val">
|
|
<title>SEND_VAL</title>
|
|
<section xml:id="internals2.opcodes.send-val.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Pass the constant value as an actual parameter to a function. DO_FCALL follows.
|
|
* opcode number: 65
|
|
*/
|
|
function funcA($msg){
|
|
print $msg;
|
|
}
|
|
|
|
funcA('HELLO');
|
|
|
|
defined('IN_PHPBB');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.send-val.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>1</entry>
|
|
<entry>SEND_VAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'HELLO'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'funca'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>12</entry><entry>3</entry>
|
|
<entry>SEND_VAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'IN_PHPBB'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'defined'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: funcA</simpara>
|
|
<simpara>Compiled variables: !0=$msg </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>RECV</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>3</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.send-var">
|
|
<title>SEND_VAR</title>
|
|
<section xml:id="internals2.opcodes.send-var.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Pass the variable value as an actual parameter to a function. DO_FCALL follows.
|
|
* opcode number: 66
|
|
*/
|
|
$a = array(1,2,3);
|
|
if(is_array($a)){ return 0; }
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.send-var.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'is_array'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>JMPZ</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$2,->9</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->9</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>9</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.send-var-no-ref">
|
|
<title>SEND_VAR_NO_REF</title>
|
|
<section xml:id="internals2.opcodes.send-var-no-ref.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 106
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.sl">
|
|
<title>SL</title>
|
|
<section xml:id="internals2.opcodes.sl.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Shift value1 by balue2 bits to left
|
|
* opcode number: 6
|
|
*/
|
|
echo 8 << 2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.sl.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>SL</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>8,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.sr">
|
|
<title>SR</title>
|
|
<section xml:id="internals2.opcodes.sr.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Shift bits to right
|
|
* opcode number: 7
|
|
*/
|
|
echo 8 >> 2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.sr.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>SR</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>8,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.sub">
|
|
<title>SUB</title>
|
|
<section xml:id="internals2.opcodes.sub.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Subtracts "value2" from "value1" and stores the result into "result".
|
|
* opcode number: 2
|
|
*/
|
|
echo 1-2;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.sub.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>SUB</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1,2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>2</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.switch-free">
|
|
<title>SWITCH_FREE</title>
|
|
<section xml:id="internals2.opcodes.switch-free.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Release the allocated space of "value"?
|
|
* opcode number: 49
|
|
*/
|
|
$a = array(1,2,3);
|
|
foreach($a as $num){
|
|
print $num;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.switch-free.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a, !1=$num </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>FE_RESET</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!0,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>FE_FETCH</entry><entry> </entry>
|
|
<entry> </entry><entry>$3</entry>
|
|
<entry>$2,->11</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>ZEND_OP_DATA</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,$3</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>8</entry>
|
|
<entry>PRINT</entry><entry> </entry>
|
|
<entry> </entry><entry>~5</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>~5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>10</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>SWITCH_FREE</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>12</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.throw">
|
|
<title>THROW</title>
|
|
<section xml:id="internals2.opcodes.throw.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 108
|
|
*/
|
|
try {
|
|
$error = 'Always throw this error';
|
|
throw new Exception($error);
|
|
|
|
// Code following an exception is not executed.
|
|
echo 'Never executed';
|
|
|
|
} catch (Exception $e) {
|
|
echo 'Caught exception: ', $e->getMessage(), "\n";
|
|
}
|
|
|
|
// Continue execution
|
|
echo 'Hello World';
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.throw.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$error, !1=$e </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,'Always+throw+this+error'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>1</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:1</entry>
|
|
<entry>'Exception'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>:1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>SEND_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>4</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>ZEND_THROW</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry>$2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>11</entry><entry>6</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Never+executed'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>7</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->15</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:4</entry>
|
|
<entry>'Exception'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>9</entry>
|
|
<entry>ZEND_CATCH</entry><entry> </entry>
|
|
<entry>15</entry><entry> </entry>
|
|
<entry>$4,!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>14</entry><entry>10</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Caught+exception%3A+'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>11</entry>
|
|
<entry>ZEND_INIT_METHOD_CALL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'getMessage'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>12</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>13</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>$6</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>14</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'%0A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>18</entry><entry>15</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'Hello+World'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>19</entry><entry>16</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.ticks">
|
|
<title>TICKS</title>
|
|
<section xml:id="internals2.opcodes.ticks.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 105
|
|
*/
|
|
// A function that records the time when it is called
|
|
function profile()
|
|
{
|
|
echo "profile function is called\n";
|
|
}
|
|
|
|
// Set up a tick handler
|
|
register_tick_function("profile");
|
|
|
|
// Initialize the function before the declare block
|
|
profile();
|
|
|
|
// Run a block of code, throw a tick every 2nd statement
|
|
declare(ticks=2) {
|
|
for ($x = 0; $x < 10; ++$x) {
|
|
echo "hello world\n";
|
|
}
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.ticks.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>7</entry><entry>0</entry>
|
|
<entry>NOP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry>13</entry><entry>1</entry>
|
|
<entry>SEND_VAL</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'profile'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>1</entry><entry> </entry>
|
|
<entry>'register_tick_function'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>16</entry><entry>3</entry>
|
|
<entry>DO_FCALL</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry>'profile'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>20</entry><entry>4</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>5</entry>
|
|
<entry>IS_SMALLER</entry><entry> </entry>
|
|
<entry> </entry><entry>~3</entry>
|
|
<entry>!0,10</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>6</entry>
|
|
<entry>JMPZNZ</entry><entry> </entry>
|
|
<entry>9</entry><entry> </entry>
|
|
<entry>~3,->13</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>7</entry>
|
|
<entry>PRE_INC</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>8</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->5</entry>
|
|
</row>
|
|
<row>
|
|
<entry>21</entry><entry>9</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'hello+world%0A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>10</entry>
|
|
<entry>TICKS</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>22</entry><entry>11</entry>
|
|
<entry>TICKS</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>12</entry>
|
|
<entry>JMP</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>->7</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>13</entry>
|
|
<entry>TICKS</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>23</entry><entry>14</entry>
|
|
<entry>TICKS</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry>24</entry><entry>15</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
<simpara>Function name: profile</simpara>
|
|
<simpara>Compiled variables: none </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>9</entry><entry>0</entry>
|
|
<entry>ECHO</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>'profile+function+is+called%0A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>10</entry><entry>1</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>null</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.unset-dim">
|
|
<title>UNSET_DIM</title>
|
|
<section xml:id="internals2.opcodes.unset-dim.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Unset the entry of array-value, which is specified by index, and store the original element value into "result".
|
|
* opcode number: 75
|
|
*/
|
|
$a = array(1,2,3);
|
|
unset($a[0]);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.unset-dim.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>INIT_ARRAY</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>2</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>ADD_ARRAY_ELEMENT</entry><entry> </entry>
|
|
<entry> </entry><entry>~0</entry>
|
|
<entry>3</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,~0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>UNSET_DIM</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!0,0</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.unset-obj">
|
|
<title>UNSET_OBJ</title>
|
|
<section xml:id="internals2.opcodes.unset-obj.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Unset the property of the current object (this) and store the original value into "result".
|
|
* opcode number: 76
|
|
*/
|
|
$obj = new A();
|
|
unset($obj->num);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.unset-obj.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$obj </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ZEND_FETCH_CLASS</entry><entry> </entry>
|
|
<entry> </entry><entry>:0</entry>
|
|
<entry>'A'</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>1</entry>
|
|
<entry>NEW</entry><entry> </entry>
|
|
<entry> </entry><entry>$1</entry>
|
|
<entry>:0</entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>2</entry>
|
|
<entry>DO_FCALL_BY_NAME</entry><entry> </entry>
|
|
<entry>0</entry><entry> </entry>
|
|
<entry> </entry>
|
|
</row>
|
|
<row>
|
|
<entry> </entry><entry>3</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,$1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>4</entry>
|
|
<entry>UNSET_OBJ</entry><entry> </entry>
|
|
<entry> </entry><entry>$4</entry>
|
|
<entry>!0,'num'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>5</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.unset-var">
|
|
<title>UNSET_VAR</title>
|
|
<section xml:id="internals2.opcodes.unset-var.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* Unset the variable and store the original value into "result".
|
|
* opcode number: 74
|
|
*/
|
|
$x = 1;
|
|
$a='x';
|
|
unset($$a);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.unset-var.listing">
|
|
<title>PHP opcodes</title>
|
|
<simpara>Function name: (null)</simpara>
|
|
<simpara>Compiled variables: !0=$x, !1=$a </simpara>
|
|
<informaltable>
|
|
<tgroup cols="7">
|
|
<thead>
|
|
<row>
|
|
<entry>line</entry><entry>#</entry><entry>op</entry>
|
|
<entry>fetch</entry><entry>ext</entry><entry>return</entry>
|
|
<entry>operands</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>6</entry><entry>0</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!0,1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>7</entry><entry>1</entry>
|
|
<entry>ASSIGN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>!1,'x'</entry>
|
|
</row>
|
|
<row>
|
|
<entry>8</entry><entry>2</entry>
|
|
<entry>UNSET_VAR</entry><entry> </entry>
|
|
<entry> </entry><entry>$2</entry>
|
|
<entry>!1</entry>
|
|
</row>
|
|
<row>
|
|
<entry>9</entry><entry>3</entry>
|
|
<entry>RETURN</entry><entry> </entry>
|
|
<entry> </entry><entry> </entry>
|
|
<entry>1</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.user-opcode">
|
|
<title>USER_OPCODE</title>
|
|
<section xml:id="internals2.opcodes.user-opcode.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 150
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
<section xml:id="internals2.opcodes.verify-abstract-class">
|
|
<title>VERIFY_ABSTRACT_CLASS</title>
|
|
<section xml:id="internals2.opcodes.verify-abstract-class.code">
|
|
<title>PHP code</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
*
|
|
* opcode number: 146
|
|
* No sample PHP yet */
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</section>
|
|
</section>
|
|
</chapter>
|
|
</part>
|