#21845 [Opn->Ver]: $this in static calls
| From: | alan_k@php.net | Date: | Sat, 08 Mar 2003 15:14:09 +0000 |
| Subject: | #21845 [Opn->Ver]: $this in static calls | ||
| References: | 1 | Groups: | php.pear.dev |
| Request: | Send a blank email to pear-dev+get-14159@lists.php.net to get a copy of this message | ||
ID: 21845
Updated by: alan_k@php.net
Reported By: cynic@php.net
-Status: Open
+Status: Verified
Bug Type: PEAR related
Operating System: FreeBSD-4.7 STABLE
PHP Version: 4.3.0
New Comment:
I think Andi confirmed this behaviour will disappear in PHP5 (the $this
transfer on static methods),
Probably worth emailing Stig or pear-dev to confirm that nobody has a
problem with this (patch looks ok to me)
Previous Comments:
------------------------------------------------------------------------
[2003-01-23 10:27:30] cynic@php.net
I'm sure I've seen this discussed on php-dev@, but cannot find it for
the life of me, nor do I recall the conclusion.
class foo {
function bar () {
baz::quux();
}
}
class baz {
function quux() {
printf('$this is %s set', isset($this)?'':'not')
}
}
PEAR_Error::throwError() suffers from this bug.
two alternate patches:
Index: pear/PEAR.php
===================================================================
RCS file: /repository/php4/pear/PEAR.php,v
retrieving revision 1.53
diff -u -u -r1.53 PEAR.php
--- pear/PEAR.php 21 Jan 2003 13:32:34 -0000 1.53
+++ pear/PEAR.php 23 Jan 2003 16:20:52 -0000
@@ -528,7 +528,7 @@
$code = null,
$userinfo = null)
{
- if (isset($this)) {
+ if (isset($this) && is_subclass_of($this, 'PEAR_Error')) {
return $this->raiseError($message, $code, null, null,
$userinfo);
} else {
return PEAR::raiseError($message, $code, null, null,
$userinfo);
Index: pear/PEAR.php
===================================================================
RCS file: /repository/php4/pear/PEAR.php,v
retrieving revision 1.53
diff -u -u -r1.53 PEAR.php
--- pear/PEAR.php 21 Jan 2003 13:32:34 -0000 1.53
+++ pear/PEAR.php 23 Jan 2003 16:20:34 -0000
@@ -528,7 +528,7 @@
$code = null,
$userinfo = null)
{
- if (isset($this)) {
+ if (isset($this) && method_exists($this, 'raiseError')) {
return $this->raiseError($message, $code, null, null,
$userinfo);
} else {
return PEAR::raiseError($message, $code, null, null,
$userinfo);
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=21845&edit=1