|
Posted by Johannes Findeisen on 03/28/05 18:24
Hello Jasper and Rasmus,
thanks for reply! I have found out why this does not work. Take a look below.
On Monday 28 March 2005 02:33, Rasmus Lerdorf wrote:
> Jasper Bryant-Greene wrote:
> > Rasmus Lerdorf wrote:
> >>>> Jasper Bryant-Greene wrote:
> >>>>> You can't access string offsets with square brackets [] in PHP5.
> >>>>> You need to use curly braces {} instead.
I have replaced all square brackets with curly braces when using string
offsets. This didn't helped but worked on PHP4 and 5.
> > Yes, but he's talking about PHP5. He probably has E_STRICT on, which is
> > why he's getting that error.
> >
> > I was telling him to use the correct syntax, which will cause him to not
> > get that error.
I have E_STRICT on but the same behaviour with E_STRICT off
> I know we are talking about PHP5, and that syntax does not throw an
> E_STRICT error.
>
Right!!
Okay, lets see my original function again (copied from first post):
function getNavigationContent($content_path) {
$i = 0;
$dir = opendir($content_path);
while ($file = readdir ($dir)) {
if ($file != "." && $file != ".." && !in_array($file, explode(',',
$this->arrConf['default_filtered_files']))) {
$arrAvailableContent[$i] = $file;
if(is_dir($content_path . $file)) {
echo $n = 0;
$subdir = opendir($content_path . $file);
while ($subfile = readdir ($subdir)) {
if ($subfile != "." && $subfile != "..") {
/*
* This line does not work in PHP5 cause off an
illegal string offset in an array ERROR
*/
$arrAvailableContent[$i]['submenu'][$n]['file'] =
$subfile;
$n++;
}
}
closedir($subdir);
}
$i++;
}
}
closedir($dir);
return $arrAvailableContent;
}
In the code take a look at the following line:
$arrAvailableContent[$i] = $file;
I am assiging a string to the var $arrAvailableContent[$i] .
Now lets take a look at the line i thought which was wrong:
$arrAvailableContent[$i]['submenu'][$n]['file'] = $subfile;
Now i am assigning a string to $arrAvailableContent[$i]['submenu'][$n]['file']
and this is what doesn't work. Now i have var_dump'ed all the arrays and i
found out, that there are no values in $arrAvailableContent[$i]['submenu']
[$n]['file'] in PHP4. In PHP5 the script exits because of a Fatal Error. But
if i set the line:
$arrAvailableContent[$i] = $file;
To:
$arrAvailableContent[$i]['file'] = $file;
Everything works fine in PHP4 and PHP5.
My function now looks like this:
function getNavigationContent($content_path) {
$i = 0;
$dir = opendir($content_path);
while ($file = readdir ($dir)) {
if ($file != "." && $file != ".." && !in_array($file, explode(',',
$this->arrConf['default_filtered_files']))) {
$arrAvailableContent[$i]{'file'} = $file;
if(is_dir($content_path . $file)) {
echo $n = 0;
$subdir = opendir($content_path . $file);
while ($subfile = readdir ($subdir)) {
if ($subfile != "." && $subfile != "..") {
$arrAvailableContent[$i]{'submenu'}[$n]{'file'} =
$subfile;
$n++;
}
}
closedir($subdir);
}
$i++;
}
}
closedir($dir);
return $arrAvailableContent;
}
This works in PHP4 (4.3.10) and PHP5 (5.0.3)!
Okay, after this my array doesn't look like the application wants it but this
is because i never had this problem before and it should be fixed at all. I
can change it quickly in my app since it is designed very clean but i just
wanted you to know my conclusion.
I have developed many lines of code in PHP4 in the last years but this weekend
i gave PHP5 a try. I must say i am impressed. PHP4 really is missing some
features but it is great too. Thanks Rasmus for inventing this scripting
language. I will become a better PHP programmer just only with the new
features in PHP5!
Have a nice day!
Regards
--
# Johannes Findeisen
[Back to original message]
|