

No op
Op1: -
Op2: -
Return: -
Adds two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 + 2
Gives:
ZEND_ADD 1 2 ~0
Subtracts two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 - 2
Gives:
ZEND_SUB 1 2 ~0
Multiplies two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 * 2
Gives:
ZEND_MUL 1 2 ~0
Divides two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 / 2
Gives:
ZEND_DIV 1 2 ~0
Calculates LHS % RHS
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 % 2
Gives:
ZEND_MOD 1 2 ~0
Shifts-left a value
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 << 2
Gives:
ZEND_SL 1 2 ~0
Shifts-right two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 >> 2
Gives:
ZEND_SR 1 2 ~0
Concatenates two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 . 2
Gives:
ZEND_CONCAT 1 2 ~0
Bitwise-Ors two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 | 2
Gives:
ZEND_BW_OR 1 2 ~0
Bitwise-Ands two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 & 2
Gives:
ZEND_BW_AND 1 2 ~0
Bitwise-Xors two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 ^ 2
Gives:
ZEND_XOR 1 2 ~0
Bitwise-negates a value
Op1: Value
Op2: -
Result: Variable where the result is stored
Example:
~ 1
Gives:
ZEND_BW_NOT 1 - ~0
Boolean-negates a value
Op1: Value
Op2: -
Result: Variable where the result is stored
Example:
! 1
Gives:
ZEND_BOOL_NOT 1 - ~0
Boolean-Xors two values
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 xor 2
Gives:
ZEND_BOOL_XOR 1 2 ~0
Compares two values using ===
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 === 2
Gives:
ZEND_IS_IDENTICAL 1 2 ~0
Compares two values using !==
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 !== 2
Gives:
ZEND_IS_NOT_IDENTICAL 1 2 ~0
Compares two values using ==
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 == 2
Gives:
ZEND_IS_EQUAL 1 2 ~0
Compares two values using !=
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 != 2
Gives:
ZEND_IS_NOT_EQUAL 1 2 ~0
Compares two values using <
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 < 2
Gives:
ZEND_IS_SMALLER 1 2 ~0
Compares two values using <=
Op1: LHS
Op2: RHS
Result: Variable where the result is stored
Example:
1 <= 2
Gives:
ZEND_IS_SMALLER_OR_EQUAL 1 2 ~0
Casts a value to another type
Op1: LHS
Op2: -
Result: Variable where the result is stored
Extended value: Type to cast to.
Example:
$x = (double)$y;
Gives:
01 0x9BF728 ZEND_CAST $y, - => ~1 (Extended value: 2)
Assigns a value to the result of a ternary operator expression.
Op1: Value to assign
Op2: -
Result: Variable where the result is stored
Example:
$x = (3 > 4) ? 1 : 2;
Gives:
00 0x9BF7F8 ZEND_IS_SMALLER 4, 3 => ~0 (Extended value: 0) 01 0x9BF858 ZEND_JMPZ ~0, 0x9BF978 => - (Extended value: 0) 02 0x9BF8B8 ZEND_QM_ASSIGN 1, - => ~1 (Extended value: 0) 03 0x9BF918 ZEND_JMP 0x9BF9D8, - => - (Extended value: 0) 04 0x9BF978 ZEND_QM_ASSIGN 2, - => ~1 (Extended value: 0) 05 0x9BF9D8 ZEND_ASSIGN $x, ~1 => +2 (Extended value: 0)
Adds a value to a variable
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table.
Op2: Value to add
Result: Variable where the result is stored
Example:
$x += 3;
Gives:
ZEND_ASSIGN_ADD ~0 3 $0
Subtracts a value from a variable
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value to add
Result: Variable where the result is stored
Example:
$x -= 3;
Gives:
ZEND_ASSIGN_SUB ~0 3 $0
Multiplies a variable with a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value to mulitply with
Result: Variable where the result is stored
Example:
$x *= 3;
Gives:
ZEND_ASSIGN_MUL ~0 3 $0
Divides a variable by a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value to divide by
Result: Variable where the result is stored
Example:
$x /= 3;
Gives:
ZEND_ASSIGN_DIV ~0 3 $0
Mods a variable with a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value
Result: Variable where the result is stored
Example:
$x %= 3;
Gives:
ZEND_ASSIGN_MOD ~0 3 $0
Shift-lefts a variable by a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value
Result: Variable where the result is stored
Example:
$x <<= 3;
Gives:
ZEND_ASSIGN_SL ~0 3 $0
Shift-rights a variable by a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value
Result: Variable where the result is stored
Example:
$x <<= 3;
Gives:
ZEND_ASSIGN_SR ~0 3 $0
Concatenates a value to a variable
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value
Result: Variable where the result is stored
Example:
$x .= 3;
Gives:
ZEND_ASSIGN_CONCAT ~0 3 $0
Bitwise-Ors a variable with a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value
Result: Variable where the result is stored
Example:
$x |= 3;
Gives:
ZEND_ASSIGN_BW_OR ~0 3 $0
Bitwise-Ands a variable with a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value
Result: Variable where the result is stored
Example:
$x &= 3;
Gives:
ZEND_ASSIGN_BW_AND ~0 3 $0
Bitwise-Xors a variable with a value.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: Value
Result: Variable where the result is stored
Example:
$x ^= 3;
Gives:
ZEND_ASSIGN_BW_XOR ~0 3 $0
Pre-increments a variable.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: -
Result: Variable where the result is stored
Example:
++$x;
Gives:
ZEND_PRE_INC ~0 3 $0
Pre-decrements a variable.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: -
Result: Variable where the result is stored
Example:
--$x;
Gives:
ZEND_PRE_DEC ~0 3 $0
Post-increments a variable.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: -
Result: The temporary variable where the side-effect is stored
Example:
$x++;
Gives:
ZEND_POST_INC ~0 - ~0
Post-decrements a variable.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: -
Result: The temporary variable where the side-effect is stored
Example:
$x--;
Gives:
ZEND_POST_DEC ~0 - ~0
Assigns a value to a variable.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2: The value
Result: The variable where the result is stored.
Example:
$x = 3;
Gives:
ZEND_ASSIGN ~0 3 $0
Assigns a reference to a variable.
Op1: Index you can use to look up the the variable name of the LHS side variable in the variable names table
Op2:Index you can use to look up the the variable name of the RHS side variable in the variable names table
Result: Result of the assignment.
Example:
$y = &$x;
Gives:
0x9BF7F8 ZEND_ASSIGN_REF $y, $x => +0
Opcode of the echo function
Op1: Value to echo
Op2: -
Result: -
Example:
echo 4;
Gives:
ZEND_ECHO 4 - -
Opcode of the print function
Op1: Value to echo
Op2: -
Result: Return value of the print function
Example:
print 4;
Gives:
ZEND_ECHO 4 - ~0
Unconditional Jump
Op1: Pointer to zend_op instruction to jump to.
Op2: -
Result: -
Example:
if (3 > 4) { }
Gives:
ZEND_JMP 0x9BFA38, - => -
Conditional Jump if zero
Op1: Value to check for zero
Op2: Pointer to zend_op instruction to jump to
Result: -
Example:
if (3 > 4) { }
Gives:
ZEND_JMPZ ~0, 0x9BF918 => -
Conditional Jump if not zero
Op1: Value to check for non-zero value
Op2: Pointer to zend_op instruction to jump to
Result: -
Example:
do
{
echo "hi";
} while ($x < 3);
Gives:
01 0x9BF858 ZEND_ECHO "hi", - => - (Extended value: 0) 02 0x9BF8B8 ZEND_IS_SMALLER $x, 3 => ~1 (Extended value: 0) 03 0x9BF918 ZEND_JMPNZ ~1, 0x9BF858 => - (Extended value: 0)
This is an interesting opcode which works differently than all other opcodes so far. I think it’s Jump to X if value is not zero, to Y otherwise. It’s the first instruction I found that makes use of the zend_op::extended_value field.
Op1: Value to check for non-zero
Op2: Index of zend_op instruction to jump to if value is not zero.
Result: -
extended_value: Index of zend_op instruction to jump to if value is zero.
Example:
for ($i=0;$i<10;$i++)
{
echo "hi";
echo "hi";
}
Gives:
00 0x9BF7F8 ZEND_ASSIGN $i, 0 => +0 (Extended value: 0) 01 0x9BF858 ZEND_IS_SMALLER $i, 10 => ~1 (Extended value: 0) 02 0x9BF8B8 ZEND_JMPZNZ ~1, 0x9 => - (Extended value: 6) 03 0x9BF918 ZEND_POST_INC $i, - => ~2 (Extended value: 0) 04 0x9BF978 ZEND_FREE ~2, - => - (Extended value: 0) 05 0x9BF9D8 ZEND_JMP 0x9BF858, - => - (Extended value: 0) 06 0x9BFA38 ZEND_ECHO "hi", - => - (Extended value: 0) 07 0x9BFA98 ZEND_ECHO "hi", - => - (Extended value: 0) 08 0x9BFAF8 ZEND_JMP 0x9BF918, - => - (Extended value: 0) 09 0x9BFB58 ZEND_RETURN 1, - => - (Extended value: 0) 10 0x9BFBB8 ZEND_HANDLE_EXCEPTION -, - => - (Extended value: 0)
We can see the ZEND_JMPZNZ is used for $i<10. As long as that’s true, execution will continue at instruction 6. If the condition turns false, execution will hop to instruction 9.
Some kind of extended conditional Jump if zero.
Op1: Value to check for zero value
Op2: Pointer to zend_op instruction to jump to
Result: ???
Example:
if ($x < 3 && $x < 10)
{
echo "hi";
}
Gives:
00 0x9BF7F8 ZEND_IS_SMALLER $x, 3 => ~0 (Extended value: 0) 01 0x9BF858 ZEND_JMPZ_EX ~0, 0x9BF978 => ~0 (Extended value: 0) 02 0x9BF8B8 ZEND_IS_SMALLER $x, 10 => ~1 (Extended value: 0) 03 0x9BF918 ZEND_BOOL ~1, - => ~0 (Extended value: 0) 04 0x9BF978 ZEND_JMPZ ~0, 0x9BFA98 => - (Extended value: 0) 05 0x9BF9D8 ZEND_ECHO "hi", - => - (Extended value: 0) 06 0x9BFA38 ZEND_JMP 0x9BFA98, - => - (Extended value: 0) 07 0x9BFA98 ZEND_RETURN 1, - => - (Extended value: 0)
Some kind of extended conditional Jump if non-zero.
Op1: Value to check for non-zero value
Op2: Pointer to zend_op instruction to jump to
Result: ???
Example:
if ($x < 3 || $x < 10)
{
echo "hi";
}
Gives:
00 0x9BF7F8 ZEND_IS_SMALLER $x, 3 => ~0 (Extended value: 0) 01 0x9BF858 ZEND_JMPNZ_EX ~0, 0x9BF978 => ~0 (Extended value: 0) 02 0x9BF8B8 ZEND_IS_SMALLER $x, 10 => ~1 (Extended value: 0) 03 0x9BF918 ZEND_BOOL ~1, - => ~0 (Extended value: 0) 04 0x9BF978 ZEND_JMPZ ~0, 0x9BFA98 => - (Extended value: 0) 05 0x9BF9D8 ZEND_ECHO "hi", - => - (Extended value: 0) 06 0x9BFA38 ZEND_JMP 0x9BFA98, - => - (Extended value: 0) 07 0x9BFA98 ZEND_RETURN 1, - => - (Extended value: 0)
Case expression inside a switch statement.
Op1: Switch value
Op2: Case value
Result: Result of comparison
Example:
switch ($x)
{
case 3: print "yay";
}
Gives:
ZEND_CASE $x, 3 => ~0
Frees the variable used in switch expression.
Op1: Variable to free.
Op2: -
Result: -
Example:
switch (3 > 4)
{
}
Gives:
01 0x9BF858 ZEND_SWITCH_FREE ~0, - => - (Extended value: 0)
Break expression inside a loop.
Op1: -
Op2: Number of enclosing structures to break out of.
Result: -
Example:
while (true)
{
break 33;
}
Gives:
0x9BF8B8 ZEND_BRK -, 33 => -
Continue expression inside a loop.
Op1: -
Op2: continue accepts an optional numeric argument which tells it how many levels of enclosing loops it should skip to the end of.
Result: -
Example:
while (true)
{
continue 33;
}
Gives:
0x9BF8B8 ZEND_CONT -, 33 => -
I don’t have a clue. Issued by && and || expressions.
Op1: ???
Op2: -
Result: ???
Example:
if ($x < 3 && $x < 10) { echo "hi"; }
Gives:
00 0x9BF7F8 ZEND_IS_SMALLER $x, 3 => ~0 (Extended value: 0) 01 0x9BF858 ZEND_JMPZ_EX ~0, 0x9BF978 => ~0 (Extended value: 0) 02 0x9BF8B8 ZEND_IS_SMALLER $x, 10 => ~1 (Extended value: 0) 03 0x9BF918 ZEND_BOOL ~1, - => ~0 (Extended value: 0) 04 0x9BF978 ZEND_JMPZ ~0, 0x9BFA98 => - (Extended value: 0) 05 0x9BF9D8 ZEND_ECHO "hi", - => - (Extended value: 0) 06 0x9BFA38 ZEND_JMP 0x9BFA98, - => - (Extended value: 0) 07 0x9BFA98 ZEND_RETURN 1, - => - (Extended value: 0)
Creates a new empty string. This is used by more complex string operations.
Op1: -
Op2: -
Result: The new string variable
Example:
$x = "Hi $y";
Gives:
00 0x9BF7F8 ZEND_INIT_STRING -, - => ~0 (Extended value: 0)
Adds a character to a string. This is used by more complex string operations.
Op1: String variable
Op2: Character code
Result: String variable
Example:
$x = "Hi [ $y";
Gives:
00 0x9BF7F8 ZEND_INIT_STRING -, - => ~0 (Extended value: 0) 01 0x9BF858 ZEND_ADD_STRING ~0, "Hi" => ~0 (Extended value: 0) 02 0x9BF8B8 ZEND_ADD_STRING ~0, " " => ~0 (Extended value: 0) 03 0x9BF918 ZEND_ADD_CHAR ~0, 91 => ~0 (Extended value: 0) 04 0x9BF978 ZEND_ADD_STRING ~0, " " => ~0 (Extended value: 0) 05 0x9BF9D8 ZEND_ADD_VAR ~0, $y => ~0 (Extended value: 0) 06 0x9BFA38 ZEND_ASSIGN $x, ~0 => +1 (Extended value: 0))
Adds a string literal to a string. This is used by more complex string operations.
Op1: String variable
Op2: String literal to add
Result: String variable
Example:
$x = "Hi $y";
Gives:
00 0x9BF7F8 ZEND_INIT_STRING -, - => ~0 (Extended value: 0) 01 0x9BF858 ZEND_ADD_STRING ~0, "Hi" => ~0 (Extended value: 0) 02 0x9BF8B8 ZEND_ADD_STRING ~0, " " => ~0 (Extended value: 0)
Inserts a variable into a string.
Op1: String variable
Op2: Variable ID
Result: String variable
Example:
echo "$dir";
Gives:
01 0x9BF858 ZEND_ADD_VAR ~0, $dir => ~0 (Extended value: 0)
Starts a silent block. That’s a block where error reporting is disabled.
Op1: -
Op2: -
Result: Probably a handle to the block
Example:
@foo();
Gives:
01 0x9BF858 ZEND_BEGIN_SILENCE -, - => ~0 (Extended value: 0) 02 0x9BF8B8 ZEND_DO_FCALL "foo", - => +1 (Extended value: 0) 03 0x9BF918 ZEND_END_SILENCE ~0, - => - (Extended value: 0)
Ends a silent block. That’s a block where error reporting is disabled.
Op1: Probably a handle to the block
Op2: -
Result: -
Example:
@foo();
Gives:
01 0x9BF858 ZEND_BEGIN_SILENCE -, - => ~0 (Extended value: 0) 02 0x9BF8B8 ZEND_DO_FCALL "foo", - => +1 (Extended value: 0) 03 0x9BF918 ZEND_END_SILENCE ~0, - => - (Extended value: 0)
Used to prepare a function call through a string variable that contains the function name.
Op1: -
Op2: String variable
Result: -
Example:
$x = "foo"; $x(3);
Gives:
04 0x9BF978 ZEND_INIT_FCALL_BY_NAME -, $x => - (Extended value: 0)
Used to call functions
Op1: Name of the function
Op2: -
Return: -
Extended value: Number of arguments
Example:
fib(12);
Gives:
02 0x9BF8B8 ZEND_DO_FCALL "fib", - => +0 (Extended value: 1)
Used to make a function call through a string variable that contains the function name.
Op1: -
Op2: -
Result: Return value of the function
Extended value: Number of arguments
Example:
$x = "foo"; echo $x();
Gives:
05 0x9BF9D8 ZEND_DO_FCALL_BY_NAME -, - => +3 (Extended value: 0)
It’s curious that there’s nothing in the parameters that identifies the function to call. Either it’s always the last function prepared with ZEND_INIT_FCALL_BY_NAME or there’s an additional parameter hidden somewhere I haven’t considered yet.
Returns a value from a function
Op1: Value to return
Op2: -
Return: -
Example:
return 1;
Gives:
ZEND_RETURN 1 - -
Assigns a value that was passed to a function to a variable.
Op1: Number of parameter
Op2: -
Return: Variable name
Example:
function foo($abc, $y = 3)
Gives:
00 0x9C1078 ZEND_RECV 1, - => $abc (Extended value: 0)
Assigns an optional value that was passed to a function to a variable. If no value was passed, the default value is assigned.
Op1: Number of parameter
Op2: Default value
Return: Variable name
Example:
function foo($abc, $y = 3)
Gives:
01 0x9C10D8 ZEND_RECV_INIT 2, 3 => $y (Extended value: 0)
Used to send values to functions.
Op1: Value to send
Op2: -
Return: -
Example:
function(3)
Gives
ZEND_SEND_VAL 3 - -
Used to send variables to functions.
Op1: Variable to send
Op2: -
Return: -
Example:
function($x)
Gives
ZEND_SEND_VAR ~0 - -
Used to send references to functions.
Op1: Reference to send
Op2: -
Return: -
Example:
function(&$x)
Gives
ZEND_SEND_REF ~0 - -
Instantiates a class.
Op1: ???
Op2: ???
Result: Instantiated class.
Example:
new Foo;
Gives:
03 0x9BF918 ZEND_NEW null, 0x5 => +3 (Extended value: 0)
This instruction is added automatically by the PHP compiler. It seems to free variables not used anymore. But the instruction isn’t added for every variable not used anymore. I can’t yet predict a pattern.
Op1: Variable to free
Op2: -
Result: -
Example:
for ($i=0;$i<=10;$i++)
{
}
Gives:
05 0x9BF9D8 ZEND_POST_INC $i, - => ~4 (Extended value: 0) 06 0x9BFA38 ZEND_FREE ~4, - => - (Extended value: 0)
The side effect of the post increment operation is freed.
Initializes an array with none or one element.
Op1: Key of the first element or -
Op2: Value of the first element or -
Result: Array variable (!!!)
Example:
$arr = array(); $arr = array(1 => 2, 3 => 4);
Gives:
0x9BF7F8 ZEND_INIT_ARRAY -, - => ~0 0x9BF8B8 ZEND_INIT_ARRAY 2, 1 => ~2
Adds an element to an array.
Op1: Key of the element
Op2: Value of the element or -
Result: Array variable (!!!)
Example:
$arr = array(1 => 2, 3 => 4); $arr = array(1 => 2, 3);
Gives:
0x9BF858 ZEND_ADD_ARRAY_ELEMENT 4, 3 => ~0 0x9BF978 ZEND_ADD_ARRAY_ELEMENT 3, - => ~2
Includes and evaluates a file or evaluates an expression.
Op1: Filename or string
Op2: 1 or 2 for eval or include
Result: Result of evaluation
Example:
eval ("foo();");
include ("bar.php");
Gives:
03 0x9BF918 ZEND_INCLUDE_OR_EVAL "foo();", 0x1 => +2 (Extended value: 0) 04 0x9BF978 ZEND_INCLUDE_OR_EVAL "bar.php", 0x2 => +3 (Extended value: 0)
Unsets a variable.
Op1: Name of the variable
Op2: -
Result: -
Example:
unset($x);
Gives:
0x9BF7F8 ZEND_UNSET_VAR "x", - => -
Exits the script.
Op1: Exit code
Op2: -
Result: -
Example:
exit(3);
Gives:
0x9BF7F8 ZEND_EXIT 3, - => -
Example:
die(“Bah”);
Catches an exception
Op1: null
Op2: Name of the variable where the exception object is stored.
Result: null
Extended value: ???
Example:
throw $x;
Gives:
07 0x9BFA98 ZEND_CATCH null, "x" => - (Extended value:![]()
Throws an exception
Op1: Exception object
Op2: -
Result: -
Example:
throw $x;
Gives:
02 0x9BF8B8 ZEND_THROW $x, - => - (Extended value: 0)
Looks up a class.
Op1: -
Op2: Name of the class
Result: null
Extended value: ZEND_FETCH_CLASS_GLOBAL
Example:
new Foo;
Gives:
02 0x9BF8B8 ZEND_FETCH_CLASS -, "Foo" => null (Extended value: 4)
This opcode is more complex, see zend_compile.c / zend_do_fetch_class but I haven’t yet figured out the rest.
Prepares a function call to a method.
Op1: Object
Op2: Name of the method
Result: ???
Example:
$x = new Foo(); $x->p(1,2,3);
Gives:
06 0x9BFA38 ZEND_INIT_METHOD_CALL $x, "p" => +6 (Extended value: 0)
Prepares a function call to a static class function.
Op1: null
Op2: Name of the method
Result: -
Example:
Bar::p(1,2,3);
Gives:
07 0x9BFA98 ZEND_INIT_STATIC_METHOD_CALL null, "p" => - (Extended value: 0)
No clue.
Op1: -
Op2: -
Result: -
Example:
foreach($x as $y)
{
}
Gives:
05 0x9BF9D8 ZEND_OP_DATA -, - => - (Extended value: 0)
Instanceof operator
Op1: Object
Op2: null
Result: Variable that stores the result
Example:
$x = ($x instanceof Bar)
Gives:
08 0x9BFAF8 ZEND_INSTANCEOF $x, null => ~8 (Extended value: 0)
Used to declare classes which implement interfaces. Possibly used for other complicated class structures too.
Op1: Empty string ???
Op2: Name of the class in lower case
Result: null
Example:
class Bar implements XXX { }
Gives:
02 0x9BF8B8 ZEND_DECLARE_CLASS "", "bar" => null (Extended value: 0)
Used to declare inherited classes which implement interfaces.
Op1: Empty string ???
Op2: Name of the class in lower case
Result: null
Extended value: ???
Example:
class Bar extends Foo implements XXX { }
Gives:
03 0x9BF918 ZEND_DECLARE_INHERITED_CLASS "", "bar" => null (Extended value: 30)
Adds an interface to a declared class.
Op1: null
Op2: null
Result: -
Example:
class Bar implements XXX { }
Gives:
05 0x9BF9D8 ZEND_ADD_INTERFACE null, null => - (Extended value: 0)
Unknown. Used after a class which implements an interface was declared.
Op1: null
Op2: -
Result: -
Example:
class Bar implements XXX { }
Gives:
06 0x9BFA38 ZEND_VERIFY_ABSTRACT_CLASS null, - => - (Extended value: 0)
Unknown. Seems to be added to the end of a file.
Op1: -
Op2: -
Result: -
Example:
Just compile a file.
Gives:
14 0x9BFD38 ZEND_HANDLE_EXCEPTION -, - => - (Extended value: 0)

Laruence
年二十有六,好追根究底,有不良嗜好, 幸性本善。
乙酉年识互联网,丁亥年入雅虎, 翌年入百度。
虽性好安稳,然经变无数,唯常叹"人生,菠菜汤尔"。



















学习了!!最近也在琢磨ZEND所提供的开发接口函数
Тема ну просто пиздец.
Неужели ничего поактуальней не нашлось?
@Турок, can you speak english? chinese is best…
可不可以把RSS输出全文???
Здраствуйте,хозяин сайта!!!
Сильно понравилась статья. Почитал новости, то скажу, что креативите очень интересно и выбираете актуальные рубрики информации. Большое Спасибо!!!
can you speak chinese?
Отличный пост. Хочу тоже поделиться прикольной ссылкой – скачать NFS Undercover
Ваш проект больше похож на форум знаменитостей, чем на персональный проект
If you need you can buy viagra today!!! Enjoy…
Не соглашаться с чем-либо — резать с плеча, а соглашаться — заключать договор..
А я еще живой, я розовый и теплый….
oriclub
Отличный пост. Дамаю для ваших читателей была бы еще позновательна статья на тему “предоставляем услуги номинального директора“
vrotmnenogi
Не спеши, а то успеешь.
Мужчине нужна жена, потому что не все в жизни можно свалить на правительство.
Человек умный удаляется за минуту перед тем, когда он был бы лишним. /Ж.Ж. Руссо/