ID: 14221
Updated by: yohgaki
Reported By: [EMAIL PROTECTED]
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] [EMAIL PROTECTED]


> 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] [EMAIL PROTECTED]

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] [EMAIL PROTECTED]

Can you try the latest RC from : www.php.net/~zeev/php-4.1.0RC3.tar.gz ?

Derick

------------------------------------------------------------------------

[2001-11-26 02:22:07] [EMAIL PROTECTED]


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


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to