php-doc-en/internals2/opcodes.xml
Hannes Magnusson 64042ccbff Remove several html entities and replace them with utf8 chars so we can drop the
dtd include
#   replaced with nothing
# — with —
# € with €
# ä with ä
# Ä with Ä


git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@310796 c90b9560-bf6c-de11-be94-00142212c4b1
2011-05-05 20:59:34 +00:00

9234 lines
267 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $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>