Edit report at http://bugs.php.net/bug.php?id=46083&edit=1

 ID:                 46083
 Updated by:         [email protected]
 Reported by:        kevin dot benton at beatport dot com
 Summary:            PHP allows default parameters to appear before
                     required parameters
-Status:             Open
+Status:             Bogus
 Type:               Feature/Change Request
-Package:            Feature/Change Request
+Package:            *General Issues
 Operating System:   All
 PHP Version:        5.2.6
 Block user comment: N
 Private report:     N

 New Comment:

This is an side effect of the possibility to allow NULL values with type
hinted parameters.


Previous Comments:
------------------------------------------------------------------------
[2008-09-15 17:07:53] kevin dot benton at beatport dot com

Description:
------------
PHP allows default parameters to appear before required parameters



>From http://www.php.net/manual/en/functions.arguments.php,



It reports that...



<?php

function makeyogurt($type = "acidophilus", $flavour)

{

    return "Making a bowl of $type $flavour.\n";

}

 

echo makeyogurt("raspberry");   // won't work as expected

?>



will generate this output:



Warning: Missing argument 2 in call to makeyogurt() in 

/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41

Making a bowl of raspberry .



I think this is simply nasty behavior.  If $type is defaulted and not
specified, PHP should know that it's a default parameter from the
parameter count and shift accordingly or generate a syntax error.  A
default parameter that appears to the left of a required parameter isn't
optional with the way parameters are processed in PHP today.



I would rather have seen one of these results:



Error: makeyogurt() specifies required parameters after defaulted
parameters in /usr/local/etc/httpd/htdocs/phptest/functest.html on line
41.



or



Making a bowl of acidophilus raspberry.



While the second solution was rejected in http://bugs.php.net/24153, I
believe the first solution is still valid and quite frankly,
appropriate.  If nothing else, this should be an option in php.ini to
prohibit optional parameters before required parameters.



C programmers are familiar with being able to do this by turning on
-Wall -Werror

Reproduce code:
---------------
See description

Expected result:
----------------
See description

Actual result:
--------------
See description


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



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=46083&edit=1

Reply via email to