Web lists-archives.com

Re: [PHP] How Do I make Global Scope Variables Available to Functions




On Sun, 2018-05-27 at 19:23 -0700, Jeffry Killen wrote:
> On May 27, 2018, at 5:46 PM, John wrote:
> 
> > I am writing a PHP script that has a number of variables that (I  
> > think) are in
> > Global scope; that is, they are defined inline before the first  
> > command of the
> > script.  Note that these are not necessarily constants as shown in  
> > the example I
> > included; most of them can be changed by the script.
> > 
> > I have functions defined following these variables and before the  
> > commands in
> > the script appear, but when they are called, the functions report  
> > the variables
> > as undefined.  This means I have to pass all the Globals to each  
> > function as a
> > call argument.
> > 
> > A trivial script illustrating the problem is below.
> > 
> > This seems odd but I don't see what I am doing wrong.  Any  
> > suggestions?
> > 
> > PHP 5.6.30 called through php-fpm on Apache.
> > 
> > Thanks in advance.
> > 
> > John
> > ------------------------------------
> > test.php - working version
> > 
> > This variant passes a variable in global scope explicitly as a  
> > parameter.  It
> > displays correctly on the browser screen.
> > 
> > 
> > <?php
> > 
> > $bad_line = "This line should display on screen.";
> > 
> > // sample function that works
> > function sample1($bad_line)
> > {
> > return "\n" . $bad_line . "\n";
> > }
> > 
> 
> This function could also be written
> function sample1($a)
>    {
>   return "\n" . $a . "\n";
> }
> > echo sample1($bad_line);
> 
> But it looks like you've answered your own question.
> If you wanted to have the function, or another function
> alter $bad_line, it would need to be passed by reference
> 
> echo sample1(&$bad_line) ....  as I understand it.
> 
> > // this call does work
> > echo sample1($bad_line);
> > 
> > exit;
> > ?>
> > 
> > 
> > 
> > test.php - doesn't work
> > 
> > This variant does not work; it throws error:
> > 
> > [Sun May 27 20:17:46.779348 2018] [proxy_fcgi:error] [pid 893:tid
> > 139838497978112] [client 192.168.1.104:37732] AH01071: Got error  
> > 'PHP message:
> > PHP Notice:  Undefined variable: bad_line in /httpd/iliffe/yrarc/ 
> > test.php on
> > line 8\n'
> > 
> > <?php
> > 
> > $bad_line = "This line should display on screen.";
> > 
> > // sample function that doesn't work
> > function sample1()
> > {
> > return "\n" . $bad_line . "\n";
> > }
> > 
> > //  this call doesn't work
> > echo sample1();
> > 
> > exit;
> > 
> > ?>
> > 
> > 
Thanks Jeffry.  Yes, I do have a workaround as you suggested but given the
number of variables being passed it is unworkable to have to pass them all as
arguments to the function.  I have been passing them as an array as I noted in
an earlier reply but that is getting unwieldy and will be a maintenance
nightmare.

The original variables, so far anyway, are not changed within any function but
can vary between calls to the various functions.  Basically it is running in a
loop that sets up the various required variables and then passes everything to
one or another function for database processing and/or printing.

Thanks for the suggestion though.  I'm getting an education here!

John

> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php