[PHP] scope of class atts in methods

2002-06-06 Thread Erik Price

Hi all,

a quick question about using PHP's objects, specifically in terms of the 
scope of class attributes:

Normally, in PHP, a variable in a function is local to that function and 
is NOT a reference to a similarly-named variable outside the function, 
right?  To the best of my knowledge, there are several ways to allow 
access to an outside variable from within a function:

1) Declare the variable as global with the global keyword
2) Access it from the $GLOBALS array
3) Pass the variable to the function as a parameter

and probably others, but it's really beside the point because I don't 
have a question about normal functions.  What I am really wondering is 
if there is any formal rules about the scope of Class Attributes in 
Class definitions and in methods -- they do not behave identical to 
PHP's functions.  For instance, I can access a class attribute from 
within a method of that class without explicitly declaring that 
attribute global inside the method, or without explicitly passing that 
attribute as a parameter to the method.  So they seem to behave as if 
they are always global.

But if I want to make a change to that class attribute from within a 
method, am I affecting a copy of the class attribute, or the class 
attribute itself?  The reason I ask is because I have a Class that is 
behaving oddly.  Here is the relevant part of the code:

Class Folder
{
// declare class attributes
var $contents = array();

// a method to add to $contents
function add_to_contents($item)
{
$this-contents[] = $item;
}

// a method to remove from $contents
function rm_item($index)
{
unset($this-contents[$index]);
}
}


The crux of my question is, does this have the effect that it appears to 
have?  I am hoping someone with thorough understanding of the internals 
of PHP can give me a definitive answer.  My tests are coming up with 
strange results, so I haven't figured it out on my own yet.

Thanks in advance,


Erik

PS: FYI, if you unset an array element, there is still an index for that 
element -- the array does not reindex itself.  A good solution to this, 
that a fellow lister named Nathan gave me, is to array_push() a dummy 
var onto the end of the array and then array_pop() it back off -- this 
reindexes the array.  But I am finding that somehow my arrays are 
remembering old elements that I could have sworn I unset, so I am 
asking the above question about the scope of class attributes in methods.










Erik Price
Web Developer Temp
Media Lab, H.H. Brown
[EMAIL PROTECTED]


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




Re: [PHP] scope of class atts in methods

2002-06-06 Thread Erik Price

If anyone read this post, you probably already forgot about it, but I 
just wanted to clarify that I found the source of the problem and it was 
a coding mistake on my part, not a problem with PHP's array 
implementation.



Erik



On Thursday, June 6, 2002, at 03:11  PM, Erik Price wrote:

 Hi all,

 a quick question about using PHP's objects, specifically in terms of 
 the scope of class attributes:

 Normally, in PHP, a variable in a function is local to that function 
 and is NOT a reference to a similarly-named variable outside the 
 function, right?  To the best of my knowledge, there are several ways 
 to allow access to an outside variable from within a function:

 1) Declare the variable as global with the global keyword
 2) Access it from the $GLOBALS array
 3) Pass the variable to the function as a parameter

 and probably others, but it's really beside the point because I don't 
 have a question about normal functions.  What I am really wondering is 
 if there is any formal rules about the scope of Class Attributes in 
 Class definitions and in methods -- they do not behave identical to 
 PHP's functions.  For instance, I can access a class attribute from 
 within a method of that class without explicitly declaring that 
 attribute global inside the method, or without explicitly passing that 
 attribute as a parameter to the method.  So they seem to behave as if 
 they are always global.

 But if I want to make a change to that class attribute from within a 
 method, am I affecting a copy of the class attribute, or the class 
 attribute itself?  The reason I ask is because I have a Class that is 
 behaving oddly.  Here is the relevant part of the code:

 Class Folder
 {
   // declare class attributes
   var $contents = array();

   // a method to add to $contents
   function add_to_contents($item)
   {
   $this-contents[] = $item;
   }

   // a method to remove from $contents
   function rm_item($index)
   {
   unset($this-contents[$index]);
   }
 }


 The crux of my question is, does this have the effect that it appears 
 to have?  I am hoping someone with thorough understanding of the 
 internals of PHP can give me a definitive answer.  My tests are coming 
 up with strange results, so I haven't figured it out on my own yet.

 Thanks in advance,


 Erik

 PS: FYI, if you unset an array element, there is still an index for 
 that element -- the array does not reindex itself.  A good solution to 
 this, that a fellow lister named Nathan gave me, is to array_push() a 
 dummy var onto the end of the array and then array_pop() it back off -- 
 this reindexes the array.  But I am finding that somehow my arrays are 
 remembering old elements that I could have sworn I unset, so I am 
 asking the above question about the scope of class attributes in 
 methods.










Erik Price
Web Developer Temp
Media Lab, H.H. Brown
[EMAIL PROTECTED]


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



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