
---- EXPECTED OUTPUT
Iterate over various generations from within overridden methods:

--> Using instance of C:
in C::doForEachOnThis
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (5) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(9) "changed.e"
}

--> Using instance of D:
in D::doForEachOnThis
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original f"
string(10) "Original g"
object(D)#%d (7) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(9) "changed.f"
  ["g":protected]=>
  string(9) "changed.g"
}

--> Using instance of E:
in E::doForEachOnThis
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original g"
string(12) "Overridden e"
object(E)#%d (8) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(9) "changed.g"
  ["e":"E":private]=>
  string(9) "changed.e"
}


Iterate over various generations from within an inherited method:

--> Using instance of C:
in C::doForEachC
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (5) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(9) "changed.e"
}

--> Using instance of D:
in C::doForEachC
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
string(10) "Original g"
object(D)#%d (7) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(9) "changed.e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(9) "changed.g"
}

--> Using instance of E:
in C::doForEachC
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original e"
string(10) "Original g"
object(E)#%d (8) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(9) "changed.e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(9) "changed.g"
  ["e":"E":private]=>
  string(12) "Overridden e"
}


Iterate over various generations from within an overridden static method:

--> Using instance of C:
in C::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
object(C)#%d (5) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(9) "changed.e"
}
in D::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
object(C)#%d (5) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
}
in E::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
object(C)#%d (5) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
}

--> Using instance of D:
in C::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original e"
string(10) "Original g"
object(D)#%d (7) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(9) "changed.e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(9) "changed.g"
}
in D::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original f"
string(10) "Original g"
object(D)#%d (7) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(9) "changed.f"
  ["g":protected]=>
  string(9) "changed.g"
}
in E::doForEach
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
string(10) "Original d"
string(10) "Original g"
object(D)#%d (7) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(9) "changed.g"
}

--> Using instance of E:
in C::doForEach
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original e"
string(10) "Original g"
object(E)#%d (8) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(9) "changed.e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(9) "changed.g"
  ["e":"E":private]=>
  string(12) "Overridden e"
}
in D::doForEach
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original f"
string(10) "Original g"
object(E)#%d (8) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(9) "changed.f"
  ["g":protected]=>
  string(9) "changed.g"
  ["e":"E":private]=>
  string(12) "Overridden e"
}
in E::doForEach
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
string(12) "Overridden d"
string(10) "Original g"
string(12) "Overridden e"
object(E)#%d (8) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  string(9) "changed.c"
  ["d":protected]=>
  string(9) "changed.d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(9) "changed.g"
  ["e":"E":private]=>
  string(9) "changed.e"
}


Iterate over various generations from outside the object:

--> Using instance of C:
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
object(C)#%d (5) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  &string(9) "changed.c"
  ["d":protected]=>
  string(10) "Original d"
  ["e":"C":private]=>
  string(10) "Original e"
}

--> Using instance of D:
string(10) "Original a"
string(10) "Original b"
string(10) "Original c"
object(D)#%d (7) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  &string(9) "changed.c"
  ["d":protected]=>
  string(10) "Original d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(10) "Original g"
}

--> Using instance of E:
string(12) "Overridden a"
string(12) "Overridden b"
string(12) "Overridden c"
object(E)#%d (8) {
  ["a"]=>
  string(9) "changed.a"
  ["b"]=>
  string(9) "changed.b"
  ["c"]=>
  &string(9) "changed.c"
  ["d":protected]=>
  string(12) "Overridden d"
  ["e":"C":private]=>
  string(10) "Original e"
  ["f":"D":private]=>
  string(10) "Original f"
  ["g":protected]=>
  string(10) "Original g"
  ["e":"E":private]=>
  string(12) "Overridden e"
}
---- ACTUAL OUTPUT
Usage: php
      php -[b|c|n|h|i|q|s|v|?] [<file>] [args...]
  Run in LSAPI mode, only '-b', '-s' and '-c' are effective
  Run in Command Line Interpreter mode when parameters are specified

  -b <address:port>|<port> Bind Path for external LSAPI Server mode
  -c <path>|<file> Look for php.ini file in this directory
  -n    No php.ini file will be used
  -h    This help
  -i    PHP information
  -l    Syntax check
  -q    Quiet-mode.  Suppress HTTP Header output.
  -s    Display colour syntax highlighted source.
  -v    Version number
  -?    This help

  args...    Arguments passed to script.
---- FAILED
