| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

17-02-2008, 00:03
|
|
|
Funktion in Klassen-Methode rekursiv aufrufen - aber keine Instanz mehr?
Hallo,
ich habe eine klasse "core" und eine Unterklasse "category" der ich "core" vererbt habe!
In der Klasse "category", kann ich ja auch mit $this-> eine Funktion aus der Core aufrufen!
Ich habe aber in einer Funktion der Klasse "category" ein Funktion hinzugefügt! also:
PHP-Code:
class category extends core
...
public function Import()
{
function Rekursiv()
{
...
// Hier will ich aber auch die Funktionen der Klassen verwenden.
// Geht aber nicht! $this, gibts hier nicht und global lässt sich auch nicht verwenden!
}
}
ich hab auch schon versucht $this als Variable der Funktion zu übergeben, aber das verabschiedet sich mein Apache!
Hat jemand ein Lösung?
Danke
Geändert von frankburian (17-02-2008 um 10:53 Uhr)
|

17-02-2008, 00:23
|
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
eine funktion innerhalb einer methode, wozu soll das gut sein
warum definierst du die funktion nicht als separate methode innerhalb der klasse?
|

17-02-2008, 08:07
|
|
|
die funktion in der methode, deshalb weil ich der methode daten rekursiv durchlaufen muss.
ja, könnte ich in der Klasse selber als Methode definieren. Finde aber das ist ein unsaubere sache, weil eine Funktion soll bei mir eine aufgabe erledigen und nicht 2 funktionen in anspruch nehmen. ist halt mein stil zu code ;O)
|

17-02-2008, 08:16
|
|
|
hab erstmal die funktion als methode ausgelagert,aber irgendwie ist es nicht möglich klassen-methoden rekursiv aufzurufen? wieso das?
hier mal mein code:
PHP-Code:
protected function category_addSQLChild($arrImport,$intParentCid)
{
for ($a=0; $a<count($arrImport); $a++)
{
$strSQLCmd = "INSERT INTO category (parent_cid,anet_cid,anet_parent_cid,name) VALUES
('".$intParentCid."','".$arrImport[$a][0]."','".$arrImport[$a][1]."','".$arrImport[$a][2]."')";
$this->mysql_query($strSQLCmd);
if (count($arrImport[$a][4]))
{
$this->category_addSQLChild($arrImport,$this->mysql_insert_id());
}
}
}
public function category_import()
{
$strImportFile = '../config/category.csv';
// Prüfen ob Import-Datei vorhanden ist
if (!file_exists($strImportFile))
{
$this->category_addError('Import-Datei wurde nicht gefunden');
return 0;
}
// Import-Datei einlesen
if (!$arrImport = file($strImportFile))
{
$this->category_addError('Import-Datei konnte nicht geöffnet');
return 0;
}
// Import in Array zerlegen
for ($a=0; $a<count($arrImport); $a++)
{
$arrImport[$a] = explode(';',$arrImport[$a]);
}
// Import-Array rekursiv konvertieren
function addChilds($intCid,$arrImport)
{
$arrReturn = array();
$intReturn = 0;
for ($a=0; $a<count($arrImport); $a++)
{
if ($arrImport[$a][1] == $intCid)
{
$arrReturn[$intReturn] = $arrImport[$a];
$arrReturn[$intReturn][4] = addChilds($arrImport[$a][0],$arrImport);
$intReturn++;
}
}
return $arrReturn;
}
for ($a=0; $a<count($arrImport); $a++)
{
if ($arrImport[$a][1] == 0)
{
$arrImport[$a][4] = addChilds($arrImport[$a][0],$arrImport);
}
}
// Jetzt rekursiv speichern
$this->category_addSQLChild($arrImport,0);
echo '<pre>';
print_r($arrImport);
return 1;
}
|

17-02-2008, 15:12
|
|
tontechniker
PHP Senior
|
|
Registriert seit: Jul 2005
Beiträge: 1.972
|
|
Zitat:
|
aber irgendwie ist es nicht möglich
|
Dass heißt?
|

17-02-2008, 16:39
|
|
|
weil sich dann mein apache aufhängt. so bald ich die instanz immer als variable übergebe an die rekursive funktion übergebe...
wieß jemand, wie das richtig umzusetzen ist?
|

17-02-2008, 17:19
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
geht das überhaupt? eine funktion innerhalb einer methode? warum legst du die wichtigen variablen nicht als eigenschaften fest und baust dir eine eigenen methode für die rekursion? irgendwie verstehe ich die logik nicht so ganz.
gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

17-02-2008, 18:08
|
|
|
naja egal! ja funktion in klassen-methode geht. habs jetzt. hat ein dicken bug in der rekursion, und darum hat sich mein apache verabschiedet.
danke!
|

17-02-2008, 21:32
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Eine Funktion in einer Methode ist allerdings eine einfache Funktion und hat mit der Klasse rein gar nichts zu tun. Es ist so, als ob die Funktion außerhalb der Klasse definiert wurde!
|

17-02-2008, 22:04
|
|
frodenius
Registrierter Benutzer
|
|
Registriert seit: Sep 2006
Ort: Germany, Frankfurt/Main
Beiträge: 156
|
|
Zitat:
Original geschrieben von PHP-Desaster
Es ist so, als ob die Funktion außerhalb der Klasse definiert wurde!
|
was schrecklich ist. man kann die methode nämlich nicht öfters aufrufen, sonst kommt es zu einem fatal error wegen redefinition der funktion.
und sie ist entgegen dem logischen sinn außerhalb der klasse sichtbar..
also ich würde ja eine private methode nehmen.
__________________
blllubb
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|