

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)







Apache
browser
bug
C++
charset
COOKIE
core
c写PHP扩展
debug
encoding
engine
Extension
GET
IE
javascript
js
json
Module
mysql
namespace
nginx
PHP
php5.4
PHP5.4新特性
PHP extension
php原理
PHP应用
PHP扩展
php源码
php源码分析
SAPI
session
utf8
variable
vim
Yaf
Zend/PHP
乱码
作用域
原理
开发php扩展
性能
扩展PHP
扩展开发
正则 GNU C/C++ (3)
Js/CSS (24)
Linux/Unix (15)
MySQL/PostgreSQL (7)
PHP Extension (13)
PHP应用 (138)
PHP源码分析 (72)
转载 (30)
随笔 (68)
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.









Where Can I Buy Music Online? MP3 Download , New Music Releases, Fast MP3 Donwload
Человек умный удаляется за минуту перед тем, когда он был бы лишним. /Ж.Ж. Руссо/
Мужчине нужна жена, потому что не все в жизни можно свалить на правительство.
Не спеши, а то успеешь.
vrotmnenogi
Отличный пост. Дамаю для ваших читателей была бы еще позновательна статья на тему “предоставляем услуги номинального директора“
oriclub
А я еще живой, я розовый и теплый….