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