Bug #14221 Updated: Segmentation fault when using class that accesses member functions & variables.
| From: | yohgaki@php.net | Date: | Thu, 06 Dec 2001 12:18:42 +0000 |
| Subject: | Bug #14221 Updated: Segmentation fault when using class that accesses member functions & variables. | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-72741@lists.php.net to get a copy of this message | ||
ID: 14221
Updated by: yohgaki
Reported By: nickj@nickj.org
Old Status: Open
Status: Duplicate
Bug Type: Scripting Engine problem
Operating System: Linux Mandrake 7.2
PHP Version: 4.0.4pl1
New Comment:
Make this report a duplicate of #13703
Previous Comments:
------------------------------------------------------------------------
[2001-11-26 04:01:48] nickj@nickj.org
> php doesn't call functions based on the parameters given
Ah hah! OK, that changes everything - I was thinking like C++ classes, which, if my memory serves me
correctly, know which member function to use.
Modified code that deals with this OK:
========================================================
#!/usr/bin/php -q
<?php
error_reporting (E_ALL);
class test {
var $currentField;
function setCurrentField($field_name) {
$this->currentField = $field_name;
}
function getValue($field_name = false) {
if ($field_name === false) $field_name = $this->currentField;
return "getValue with arg - $field_name\n";
}
}
$frm = new test;
$frm->setCurrentField("blah");
print $frm->getValue("real arg");
print $frm->getValue();
?>
========================================================
> That's an ZE problem (ie.
> method with same name should give parse error or at least some
> warning).
Agreed.
Testing this with straight functions shows that the engine does do this for straight functions:
========================================================
#!/usr/bin/php -q
<?php
error_reporting (E_ALL);
function blah() {
print "no arg\n";
}
function blah($field) {
print "with arg, $field\n";
}
blah();
blah("test");
?>
========================================================
Output gives:
[root tmp]# ./test.php
<br>
<b>Fatal error</b>: Cannot redeclare blah() in <b>./test.php</b> on line
<b>9</b><br>
[root tmp]#
An equivalent "Cannot redeclare test class member function blah() in test.php on line 9"
would be extremely helpful and is probably called for - I've always found the PHP syntax
checking to extremely clear and spot-on previously.
Many thanks for all your help,
Kind Regards,
Nick.
------------------------------------------------------------------------
[2001-11-26 03:05:16] mfischer@php.net
Your code is obviously bogus.
You're definig two methods with the same name. But I admit this shouldn't be possible,
derick?
Anyway, because of this the second getValue() overwrites the former and therefore you have an
infinite look; getValue calls getValue calls getValue calls ...
That's an ZE problem (ie. method with same name should give parse error or at least some
warning).
(Correct if otherwise)
ps: php doesn't call funtions based on the parameters given
------------------------------------------------------------------------
[2001-11-26 02:46:22] derick@php.net
Can you try the latest RC from : www.php.net/~zeev/php-4.1.0RC3.tar.gz ?
Derick
------------------------------------------------------------------------
[2001-11-26 02:22:07] nickj@nickj.org
The problem: Segmentation fault when using class that accesses member functions & variables.
A short script that reproduces the problem:
[note, this is a command line script, but an equivalent web script doesn't work either]
========================================================
#!/usr/bin/php -q
<?php
error_reporting (E_ALL);
class test {
var $currentField;
function setCurrentField($field_name) {
$this->currentField = $field_name;
}
function getValue($field_name) {
return "getValue with arg - $field_name\n";
}
function getValue() {
return $this->getValue($this->currentField);
}
}
$frm = new test;
$frm->setCurrentField("blah");
print $frm->getValue();
?>
========================================================
What happens:
[root tmp]# ./file.php
Segmentation fault (core dumped)
[root tmp]#
What I would expect to happen:
[root tmp]# ./file.php
getValue with arg - blah
[root tmp]#
============================================
Extra info about the setup being used:
O/S is Linux Mandrake 7.2 with the shipped Linux 2.2.17 kernel, and the installed PHP uses updated
RPMs that are available from the distribution's web site.
Excerpts from phpinfo() shows:
PHP Version 4.0.4pl1
Configure Command './configure' '--with-apxs=/usr/sbin/apxs'
'--without-mysql' '--disable-static' '--disable-debug'
'--enable-pic' '--enable-inline-optimization' '--prefix=/usr'
'--with-zlib' '--with-config-file-path=/etc' '--enable-magic-quotes'
'--enable-debugger' '--enable-track-vars' '--enable-safe-mode'
'--with-exec-dir=/usr/bin' '--with-regex=system' '--with-versioning'
'--enable-dba=shared' '--with-gdbm' '--with-db2'
'--enable-sysvsem' '--enable-sysvshm' '--with-mod_charset'
'--enable-force-cgi-redirect' '--with-mm' '--enable-trans-sid'
'--with-dbase' '--with-filepro' '--enable-yp' '--enable-ftp'
'--with-xml' '--with-gettext'
Server API Apache
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc
ZEND_DEBUG disabled
Thread Safety disabled
This program makes use of the Zend scripting language engine:
Zend Engine v1.0.4, Copyright (c) 1998-2000 Zend Technologies
with Zend Optimizer v1.1.0, Copyright (c) 1998-2000, by Zend Technologies
=============================================
Any extra info that I can provide that would help, please just let me know.
Kind Regards,
Nick.
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=14221&edit=1