|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2004-06-07 23:40 UTC] equake at epmail dot com dot br
Description:
------------
I got a Segmentation Fault every time that I try to return some method that does not exists.
Reproduce code:
---------------
abstract class test {
function __call($method, $params) {
if (is_callable(array($this, $method))) {
echo ("ok<br>");
return $this->{$method}($params); // abstract class test {
function __call($method, $params) {
if (is_callable(array($this, $method))) {
echo ("ok<br>");
return $this->{$method}($params); // [error_log] [notice] child pid # exit signal Segmentation fault (11)
}
}
}
class test2 extends test {
function __construct() {
echo ("hi, im test2 at ". time () ." seconds since 01/01/1970 <br>");
}
function bla() {
echo ('haha');
}
}
$x = new test2();
$x->bla_inexistent(); // any inexistent method name
}
}
}
class test2 extends test {
function __construct() {
echo ("hi, im test2 at ". time () ." seconds since 01/01/1970 <br>");
}
function bla() {
echo ('haha');
}
}
$x = new test2();
$x->bla_inexistent(); // any inexistent method name
Expected result:
----------------
hi, im test2 at 1086644752 seconds since 01/01/1970
Actual result:
--------------
"[error_log] [notice] child pid # exit signal Segmentation fault (11)" on the apache Error Log
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Dec 01 23:00:02 2025 UTC |
I'm still having problems with the CVS-PHP5-200406081230 [Tue Jun 08 10:43:03 2004] [notice] child pid 2711 exit signal Segmentation fault (11) But I think that the problem only happen when I try to return a inexistent method inside a abstract class. The following code works well (no segmentation fault): class test { function call($method, $params=null) { if (is_callable(array($this, $method))) { return $this->{$method}($params); } else { echo ("not found"); } } function message() { return "TESTE DE MENSAGEM"; } } $test = new test(); $var = $test->call("not_exist"); echo $var;the (correct) small script that throws the error: abstract class test { function __call($method, $params) { if (is_callable(array($this, $method))) { echo ("ok<br>"); return $this->{$method}($params); // [error_log] [notice] child pid # exit signal Segmentation fault (11) } } } class test2 extends test { function __construct() { echo ("hi, im test2 at ". time () ." seconds since 01/01/1970 <br>"); } function bla() { echo ('haha'); } function x() { } } $x = new test2(); $x->xjhjk(); // any inexistent method namehmm the problem seems to happen ONLY when I try to return a inexistent method from the __call method class test { function __construct() { echo ("script started at ".time()."<br>\n"); } function __call($method, $params) { if ($method == "foo") { return $this->foo_method(); } else { return $this->buggy(); } } function foo_method() { return "TESTE DE MENSAGEM"; } } $test = new test(); $var = $test->foo(); // works $var2 = $test->foo2(); // segmentation faultThis behaviour is caused by endless loop: non-ex method -> __call -> non-ex method -> __call -> .. etc. Try to call this func: function foo() { return foo(); } and you'll get the same result. not a bug, though.