Re: Why is variable not in scope?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In the case at hand I was well aware of the requirement to assign the 
value to the variable before it is used.  The assignment occurs in
the initialization of the programme, before any function is called. In 
fact, I assigned a dummy value to the variable while I was testing and 
that didn't seem to make any difference.

Regards,

John
============================================
On Sat, 2019-07-27 at 23:23 -0600, LinuxManMikeC wrote:
> Actually, that's not true. Globals are available in included files as well.
> The only problem arises when you use them before assigning a value to the
> global variable you're using.
> 
> On Sat, Jul 27, 2019 at 10:04 PM Jeffry Killen <jekillen@xxxxxxxxxxx> wrote:
> > > On Jul 27, 2019, at 8:47 PM, LinuxManMikeC <linuxmanmikec@xxxxxxxxx>
> > wrote:
> > > 
> > > Functions don't automatically have access to global variables. Use the
> > 'global' keyword to declare what global variables you're going to use in
> > your function.
> > > 
> > > function nav_list() {
> > >     global $auth_array;
> > >     // Code...
> > > }
> > > 
> > 
> > Also it will make a difference WHERE  nav_list is defined: 
> > If it is defined in a separate script file and included or required by
> > the calling script, it will not have access to $auth_array unless you
> > define it as an argument to nav_list and pass it in when nav_list is
> > called.
> > 
> > The only way I know how to make a variable visible without having to
> > pass it by reference is
> > 
> > class sampleClass
> >           {
> >            private static $test = 'Orange';
> >            public function showTest()
> >                      {
> >                       return self::$test;
> >                      }
> > }
> > 
> >  $test = new samleClass()
> > print $test->showTest(); // 'Orange' 
> > 
> > In your case
> > function nav_list($arrayArg)
> >              {
> >               // code
> >              }
> > 
> > nav_list($auth_array) //>> assuming this call is made in the scope where
> > $auth_array is defined ready to use.
> > 
> > 
> > > https://www.php.net/manual/en/language.variables.scope.php
> > > 
> > > On Sat, Jul 27, 2019, 19:47 John <john.iliffe@xxxxxxxxx> wrote:
> > > There is probably another way to do this but I have spent a good few hours
> > > trying to resolve it and I think there is something wrong with the way I
> > > understand the scope of variables in PHP, so an answer would be
> > appreciated.
> > > 
> > > I have a PHP (7.1.3) programme that opens a database during
> > initialization,
> > > gathers an associative array of variables (pg_fetch_array) and then closes
> > the
> > > database.  The array name is $auth_array.  During actual display of the
> > page the
> > > values of the elements of the array are used to control what is (not)
> > displayed
> > > and lookup of the values is done using a separate function.
> > > 
> > > At this point I can print_r() the array and it contains what I expect.
> > > 
> > > In the next line, I call a user-defined function nav_list() where this
> > array is
> > > used in the form $auth_array['column name'].  At this point I get a PHP
> > error
> > > "Got error 'PHP message: PHP Notice:  Undefined variable: auth_array in
> > > /httpd/myprogramme/yrarcex.php on line 74\nPHP message: PHP Notice: 
> > Undefined
> > > variable: auth_array .... .  At this point I cannot print_r the array, the
> > same
> > > undefined variable message appears.
> > > 
> > > I expected that auth_array would be in global scope.
> > > 
> > > so I tried calling nav_list() with no arguments, then with the name of the
> > array
> > > as the only argument, and with the address of the array (&$auth_array) and
> > also
> > > with the explicit cast nav_list(array $auth_array) and I always get the
> > same
> > > error message.  (not a data type error as suggested in the docs).
> > > 
> > > So far as I can see I am following the online documentation at 
> > > 
> > > https://www.php.net/manual/en/functions.arguments.php
> > > 
> > > exactly. 
> > > 
> > > The definition of nav_list() is;
> > > 
> > > function nav_list()
> > > {
> > >  if ($auth_array['u_....'] == 't')   <---- this is line 74 as shown in the
> > error
> > >    {
> > >       // display something
> > >    }
> > > }
> > > 
> > > 
> > 




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux