Sir Robin
Erfahrenes Mitglied
Hi du,
also nachdem ich erstmal einen Host von mir finden musste der noch PHP4 drauf hat, hab ich es dann doch geschafft einen aufzutreiben. PHP 4.4.4 lief da drauf. Ich machte einige Tests, und ich muss dir leider gestehen das ich den Fehler in keinster Weise nachvollziehen konnte, ich poste einfach mal den Quelltext der 4 Dateien, die sozusagen meine "Testumgebung" waren.
index.php4:
require.php4:
php4functions.php4:
und es funktioniert alles, so wie man es erwarten würde, sowohl unter PHP 5 als auch unter PHP 4. Ich wüsste auch nicht, was an dem was du bislang gesagt hast falsch sein sollte. Wenn du nen var_dump auf die Parameter machst und der was anzeigt, dann muss er die Funktion wohl auch finden. Als letzte Instanz kann ich dir wohl nur anbieten, dass du mir mal den Code irgendwie zukommen lässt (also den gesamten), vielleicht finde ich da was, wenn ich es im gesamten Zusammenhang sehe.
Was jetzt noch als Fehlerquelle möglich ist, ist Smarty ... vielleicht verhaspelt sich Smarty irgendwie mit seinem Cache, seinem Kompilat oder gar mit PHP4? Oder ist deine PHP4-Version dran schuld? Schon mal eine andere PHP4-Version probiert? Gehen denn andere Funktionen? Mach doch mal eine Testfunktion die nur ihre eigenen Parameter ausgibt die auch da definiert wird, wo fetch_data definiert wird und ruf sie von deiner Klasse aus auf ... geht das? Geht mein oben genannter Code bei dir?
Zu guter Letzt stellt sich natürlich die Frage, ob es wirklich nötig ist noch PHP4-kompatibel zu sein. Mittlerweile ist die Adaptionsrate recht hoch und steigt weiter. Und rein von der Codequalität her bringt das einiges, man kann dann (für PHP-Verhältnisse) OOP richtig anwenden und muss keine Altlasten mehr mit rumschleppen.
So ... vielleicht fällt mir ja morgen mehr ein ;-)
also nachdem ich erstmal einen Host von mir finden musste der noch PHP4 drauf hat, hab ich es dann doch geschafft einen aufzutreiben. PHP 4.4.4 lief da drauf. Ich machte einige Tests, und ich muss dir leider gestehen das ich den Fehler in keinster Weise nachvollziehen konnte, ich poste einfach mal den Quelltext der 4 Dateien, die sozusagen meine "Testumgebung" waren.
index.php4:
PHP:
<?php
error_reporting(E_ALL);
require('require.php4');
class Klasse {
function Klasse()
{
fetch_data(array('foo' => 'foo'), 'bar');
}
}
$klasse = new Klasse();
?>
require.php4:
PHP:
<?php
require('./smarty.php4');
require('./php4functions.php4');
?>
PHP:
<?php
class Smarty {
function assign($param1, $param2)
{
echo $param1 . $param2;
}
}
$smarty = new Smarty();
?>
php4functions.php4:
PHP:
<?php
function fetch_data($data, $praefix='') {
global $smarty;
$row = $data;
if($praefix != '') $praefix= $praefix.'_';
foreach(array_keys($data) as $name) {
$smarty->assign("$praefix$name", "$row[$name]");
}
}
?>
und es funktioniert alles, so wie man es erwarten würde, sowohl unter PHP 5 als auch unter PHP 4. Ich wüsste auch nicht, was an dem was du bislang gesagt hast falsch sein sollte. Wenn du nen var_dump auf die Parameter machst und der was anzeigt, dann muss er die Funktion wohl auch finden. Als letzte Instanz kann ich dir wohl nur anbieten, dass du mir mal den Code irgendwie zukommen lässt (also den gesamten), vielleicht finde ich da was, wenn ich es im gesamten Zusammenhang sehe.
Was jetzt noch als Fehlerquelle möglich ist, ist Smarty ... vielleicht verhaspelt sich Smarty irgendwie mit seinem Cache, seinem Kompilat oder gar mit PHP4? Oder ist deine PHP4-Version dran schuld? Schon mal eine andere PHP4-Version probiert? Gehen denn andere Funktionen? Mach doch mal eine Testfunktion die nur ihre eigenen Parameter ausgibt die auch da definiert wird, wo fetch_data definiert wird und ruf sie von deiner Klasse aus auf ... geht das? Geht mein oben genannter Code bei dir?
Zu guter Letzt stellt sich natürlich die Frage, ob es wirklich nötig ist noch PHP4-kompatibel zu sein. Mittlerweile ist die Adaptionsrate recht hoch und steigt weiter. Und rein von der Codequalität her bringt das einiges, man kann dann (für PHP-Verhältnisse) OOP richtig anwenden und muss keine Altlasten mehr mit rumschleppen.
So ... vielleicht fällt mir ja morgen mehr ein ;-)