Re: functions and scoping
| From: | Michael Virnstein | Date: | Thu, 23 May 2002 05:58:23 +0000 |
| Subject: | Re: functions and scoping | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-98866@lists.php.net to get a copy of this message | ||
Why not simply define a set of variables for root dir and the other
directories,
and use full paths in your includes?
$root = "/wwwroot/mydomain/public/";
$homepageroot = "/";
$mydir = "subdir/";
now you can do:
include $rootpath.$mydir."inc.php";
and
<a href="<?php echo $hompageroot.$mydir."inc.php";
?>">Link</a>
or
<a href="<?php echo $mydir."inc.php"; ?>">Link</a>
Regards Michael
"David Huyck" <b@bombusbee.com> schrieb im Newsbeitrag
news:20020522215607.57317.qmail@pb1.pair.com...
> I am trying to define a function that is *like* the standard PHP
"include()"
> function but is slightly different, but I am running into trouble with
> varible scoping. The idea is this:
>
> I want to mimic "include()" in a way such that when I include a file, it
can
> then include files relative to itself, instead of relative to the root
file
> in the chain of includes. For example, if I do something like this:
>
> // we are here: /root/file.php
> include("subDir/anotherFile.php");
>
> // we are here: /root/subDir/anotherFile.php
> include("diffSubDir/diffFile.php");
>
> I get a warning saying that "diffSubDir" is not a valid directory, because
> it is actually looking for "/root/diffSubDir/diffFile.php" when I mean to
> include "/root/subDir/diffSubDir/diffFile.php".
>
> The first thing I did was this:
> $myPath = getcwd()."/";
> chdir($myPath."subDir/");
> include("anotherFile.php");
> chdir($myPath);
>
> That's fine, but it's kind of kludgey, because I need to be really careful
> not to do crush my $rootPath variable if I need to do it again inside my
> include... So the next step was to protect the variable by making it
local
> to a function. Here is what I got:
>
> function myInclude($fileName)
> {
> //you are here
> $rootPath = getcwd()."/";
>
> //find where we need to go
> $aryFilePath = split("/", $fileName);
> $fileToInclude = array_pop($aryFilePath);
> $includePath = join("/", $aryFilePath) . "/";
>
> //do the include
> chdir($rootPath.$includePath);
> include($fileToInclude);
> chdir($rootPath);
> }
>
> So that's great! It does almost everything I want it to do, EXCEPT: the
> variable scope within the includes is screwy. The file included in this
> manner is local to the function, so it does not have inherent access to
the
> variables set before/after the call to myInclude(). That makes sense
> conceptually, but it doesn't solve my problem. Declaring variables as
> "global" doesn't really fix it because a) I want to keep this generic, so
I
> won't always know what variables to call as global, and b) if I call this
> function from within an object, I want to keep my variables local to the
> class, but not to the function call within the class. If I am in the
class,
> for example, and I declare a var as global, I just lost my encapsulation.
> Yuck.
>
> What I really want is for this function to work just like the native PHP
> "include()" function, where it does its thing without making its own
scope.
> Is there any way to do such a thing? I tried declaring and calling the
> function as &myInclude(), but that didn't do it either.
>
> Am I out-of-luck, or is there some cool trick I haven't learned yet?
>
> Thanks,
> David Huyck
>
>