Funktionsaufruf Parameter Standardwert
Sahra
- php
Ola wieder eine Frage hängt heute irgendwie alles zusammen,
ich habe eine Funktion mit 2 Parametern die an vielen Stellen aufgerufen wird.
meinefunktion(a,b)
in einem Fall braucht sie jetzt 3 Parameter.
$x = meinefunktion(a,b,c)
da ich den Quellcode nicht überall ändern kann wollte ich c als Standard 0 definieren es sei denn beim Aufruf wird etwas angegeben.
meinefunktion(a,b,c=0)
Leider wird der Wert nicht beim Aufruf nicht überschrieben schreibe ich hingegen
meinefunktion(a,b,c)
und rufe sie ohne dritten Wert auf dann wird das Argument vermisst und abgebrochen.
Was kann ich tun?
Bis dann
Sahra
Mahlzeit Sahra,
meinefunktion(a,b,c=0)
Leider wird der Wert nicht beim Aufruf nicht überschrieben
Ähm, könntest Du das etwas ausführlicher formulieren? Wird der Wert jetzt überschrieben oder nicht? Was meinst Du mit "überschrieben"?
Vielleicht zeigst Du einfach mal die Zeile mit der Funktionsdeklaration und die Zeile, in der der Funktionsaufruf (der nicht klappt) stattfindet ...
MfG,
EKKi
Mahlzeit Sahra,
ist schon Mittag? ohoh
meinefunktion(a,b,c=0)
Leider wird der Wert nicht beim Aufruf nicht überschrieben
Ähm, könntest Du das etwas ausführlicher formulieren? Wird der Wert jetzt überschrieben oder nicht? Was meinst Du mit "überschrieben"?
der übergebene Wert für c wird durch 0 ersetzt
Vielleicht zeigst Du einfach mal die Zeile mit der Funktionsdeklaration und die Zeile, in der der Funktionsaufruf (der nicht klappt) stattfindet ...
Aufruf:
$front_vid = getContentCat($front_vid_id, $x, $domain);
Funktion:
function getContentCat($catid, $limit ,$domain=0)
gibt mir immer Null
http://www.phpbuilder.com/manual/en/functions.arguments.php Example 6# ist doch genauso??????????
MfG,
EKKi
mfg
s
echo $begrüßung;
der übergebene Wert für c wird durch 0 ersetzt
gibt mir immer Null
Was denn nun, 0 oder null? Beides sind verschiedene Dinge. null tät auf auf einen Fehler hindeuten, der dir mit auf E_ALL gesetztem error_reporting angezeigt werden würde.
$front_vid = getContentCat($front_vid_id, $x, $domain);
Funktion:
function getContentCat($catid, $limit ,$domain=0)
gibt mir immer Null
http://www.phpbuilder.com/manual/en/functions.arguments.php Example 6# ist doch genauso??????????
Da nicht zu sehen ist, wie du auf die Werte zugreifst kann ich diese Frage nicht beantworten. (Außerdem hängen 9 Fragezeichen zu viel an der Frage.)
echo "$verabschiedung $name";
der Wert von der $domain ist "xy.de"
echo $begrüßung;
der übergebene Wert für c wird durch 0 ersetzt
gibt mir immer NullWas denn nun, 0 oder null? Beides sind verschiedene Dinge. null tät auf auf einen Fehler hindeuten, der dir mit auf E_ALL gesetztem error_reporting angezeigt werden würde.
$domain ist immer 0
$front_vid = getContentCat($front_vid_id, $x, $domain);
Funktion:
function getContentCat($catid, $limit ,$domain=0)
gibt mir immer Null
http://www.phpbuilder.com/manual/en/functions.arguments.php Example 6# ist doch genauso??????????
if("xy.de"==$domain){
}
Da nicht zu sehen ist, wie du auf die Werte zugreifst kann ich diese Frage nicht beantworten. (Außerdem hängen 9 Fragezeichen zu viel an der Frage.)
echo "$verabschiedung $name";
Hi!
Was denn nun, 0 oder null? Beides sind verschiedene Dinge. null tät auf auf einen Fehler hindeuten, der dir mit auf E_ALL gesetztem error_reporting angezeigt werden würde.
$domain ist immer 0
Innerhalb der Funktion?
Welchen Wert uebergibst Du als dritten Parameter an die Funktion?
off:PP
Hi!
hi
Was denn nun, 0 oder null? Beides sind verschiedene Dinge. null tät auf auf einen Fehler hindeuten, der dir mit auf E_ALL gesetztem error_reporting angezeigt werden würde.
hier ist es egal ob null oder 0 der Wert der übergeben wird wird durch den Standard Wert ersetzt....
$domain ist immer 0
Innerhalb der Funktion?
Welchen Wert uebergibst Du als dritten Parameter an die Funktion?
den wert "xy.de"
off:PP
Mahlzeit Sahra,
hier ist es egal ob null oder 0 der Wert der übergeben wird wird durch den Standard Wert ersetzt....
Nein, falsch. Wenn Du einen dritten Parameter angibst, wird der Wert, den übergibst, in der lokalen Variable $domain (es ist übrigens eine sehr schlechte Idee, lokale und globale Variablen mit dem gleichen Namen zu verwenden!) gespeichert. Wenn Du KEINEN dritten Parameter angibst, steht trotzdem eine lokale Variable mit dem von Dir gesetzen Standardwert (in diesem Fall 0) zur Verfügung.
Du solltest Dir das Konzept der Parameterübergabe in PHP nochmal zu Gemüte führen ...
MfG,
EKKi
PS: Und zitiere bitte in Zukunft sinnvoll - nur das, auf das Du Dich in Deiner Antwort beziehst ... TOFU ist nicht gern gesehen.
Also,
globale und lokale Variablen? Kann sein das $domain eine globale ist aber wenn man den Aufruf
$domainu = $domain;
$front_vid = getContentCat($front_vid_id, $x, $domainu);
und die Funktion
function getContentCat($catid, $limit ,$domainu = "wert"){
}
mit $domainu für uebergabe nimmt dann geht es immer noch nicht. Ja das Problem scheint doch größer zu sein. Bitte helft mir.
Danke
S
Mahlzeit Sahra,
globale und lokale Variablen?
Den Unterschied erklärt Dir gern die allwissende Müllhalde.
Kann sein das $domain eine globale ist
Kann sein. Das wird aus Deinen doch recht dürftigen Code-Fragmenten nicht klar deutlich.
$domainu = $domain;
Was soll das bringen? Sei's drum: Du weist hier also der Variablen $domainu den Wert der Variablen $domain zu.
$front_vid = getContentCat($front_vid_id, $x, $domainu);
Dieser Funktionsaufruf ist so OK. Du übergibst außer den ersten beiden Parametern auch noch den Wert der Variablen $domainu an die Funktion.
function getContentCat($catid, $limit ,$domainu = "wert"){
Diese Funktionsdeklaration ist so OK. Sie erwartet zwei Pflichtparameter. Wenn Du die Funktion mit zwei Parametern aufrufst, hat die lokale Variable $domainu den Wert "wert". Wenn Du die Funktion mit drei Parametern aufrufst, hat die lokale Variable $domainu den Wert, den Du übergeben hast.
mit $domainu für uebergabe nimmt dann geht es immer noch nicht.
"Geht nicht" geht nicht. Was geht nicht? Welcher Wert steht wann wo in welcher Variablen? Poste doch bitte mal aussagekräftigen Code ...
Ja das Problem scheint doch größer zu sein. Bitte helft mir.
Das Problem ist nicht groß - es ist nur ein anderes als Du denkst. Du scheinst ein prinzipielles Verständnisproblem in Bezug auf Funktionen in PHP zu haben. Lies Dir dazu die Grundlagen an, z.B. mit Hilfe von Tutorials oder der PHP-Dokumentation.
MfG,
EKKi
okok meine funktion
function getContentCat($catid, $limit ,$domainu = "wert")
{
$db = DB::connect(getDSN("tom"));
$db->setFetchMode(DB_FETCHMODE_ASSOC);
if (DB::isError($db)) {
die ($db->getMessage());
}
if (!empty($catid)) {
if("xy.de"==$domainu){
echo "ok";
$sql = "SELECT web_obj2groups.objgrp, web_obj2groups.objnbr as id, web_groups.type, web_items.name as titel, web_items.preview
FROM web_obj2groups, web_groups, web_items
WHERE web_obj2groups.objgrp = web_groups.objgrp AND web_obj2groups.objgrp = " . $catid . "
AND web_items.objnbr = web_obj2groups.objnbr
AND SUBSTRING(web_items.objnbr,2,3) <> 10
AND web_items.preview <> 'noimage.gif'
GROUP BY web_obj2groups.objnbr ORDER BY web_obj2groups.priority DESC, web_items.name DESC LIMIT 0,".$limit;
}else{
$sql = "SELECT web_obj2groups.objgrp, web_obj2groups.objnbr as id, web_groups.type, web_items.name as titel, web_items.preview
FROM web_obj2groups, web_groups, web_items
WHERE web_obj2groups.objgrp = web_groups.objgrp AND web_obj2groups.objgrp = " . $catid . "
AND web_items.objnbr = web_obj2groups.objnbr
AND web_items.preview <> 'noimage.gif'
GROUP BY web_obj2groups.objnbr ORDER BY web_obj2groups.priority DESC, web_items.name DESC LIMIT 0,".$limit;
}
$res = $db->query($sql);
$result_array=array();
$i = 0;
while($fld = $res->fetchRow()) {
$result_array[]=array('id'=>$fld['id'],
'catid'=>$fld['objgrp'],
'mm_name'=>$fld['titel'], // for compatibility reasons, to be removed
'mm_name2'=>fixProductNameforURL($fld['titel']), // for compatibility reasons, to be removed
'name'=>$fld['titel'],
'name2'=>fixProductNameforURL($fld['titel']),
'image'=>$fld['preview'], // for compatibility reasons, to be removed
'preview'=>$fld['preview'],
'type'=>$fld['type']);
$i++;
}
}
return($result_array);
}
mein Aufruf
$domainu = "xy.de";
$front_vid = getContentCat($front_vid_id, $x, $domainu);
Mahlzeit Sahra,
hast Du die verlinkten Seiten gelesen? Hast Du Dir die Grundlagen bzgl. Geltungsbereiche von Variablen und Parameterübergabe in PHP angeeignet?
function getContentCat($catid, $limit ,$domainu = "wert")
Wie ich bereits schrieb ist diese Funktionsdeklaration vollkommen in Ordnung. Die Funktion erwartet drei Parameter, wobei der letzte optional ist. Wird keiner angegeben, bekommt die lokale Variable $domainu den Wert "wert".
if("xy.de"==$domainu){
echo "ok";
Diese Bedingung kann also nur erfüllt sein, wenn Du die Funktion mit einem dritten Parameter mit dem Wert "xy.de" aufgerufen hast, ansonsten ...
}else{
... d.h. insbesondere beim Aufruf mit nur 2 Parametern sollte eigentlich immer in den else-Zweig gesprungen werden.
mein Aufruf
$domainu = "xy.de";
Anscheinend ignorierst Du meine Anmerkungen bzgl. der Benennung von lokalen und globalen Variablen - wie Du meinst. Allerdings ist das sowohl bei der Fehlersuche als auch für Dich bei der weiteren Entwicklung nicht unbedingt hilfreich.
$front_vid = getContentCat($front_vid_id, $x, $domainu);
Du rufst also die Funktion mit einem dritten Parameter auf, der den Wert "xy.de" hat. Deinem Code zufolge sollte die o.g. Bedingung erfüllt sein und der erste Teil der if-Abfrage abgehandelt werden. Wie ich sehe, hast Du da - wahrscheinlich zum Zweck der Fehlersuche - ein echo eingebaut. Wird das ausgegeben?
Du machst es potentiellen Helfern nicht unbedingt leicht: relevanten Code gibt's nur nach mehrmaligem Nachfragen, verlinkte Hinweise und Ratschläge scheinst Du zu ignorieren, vernünftige Debug-Ausgaben (wie sieht's eigentlich mit error_reporting() aus?) finden nicht statt oder Du nennst sie nicht ... Du scheinst davon auszugehen, dass alle Deine Leser eine funktionierende Glaskugel neben ihrem Monitor haben. Letztendlich willst doch DU Hilfe, oder nicht? Dann musst DU auch dafür sorgen, dass die Leute, die Dir vielleicht helfen könnten, alle relevanten Informationen haben, um Dir helfen zu können - zumindest sollten sie alle Informationen haben, die Du hast, ohne dass man Dir diese einzeln aus der Nase ziehen muss.
Letztendlich ist - zumindest mir - immer noch nicht klar, was eigentlich genau bei Deinem Funktionsaufruf passieren soll und was stattdessen passiert (dass als Rückgabe eigentlich ein assoziatives Array mit den aus der Datenbank geholten Werten geliefert werden soll, ist klar). Was liefert die Funktion denn in Deinem Beispiel zurück? Welche Fehlermeldungen (ich weise nochmals auf error_reporting() hin!) treten auf (bitte GENAU angeben, kein "irgendwas mit soundso")?
MfG,
EKKi
Hi,
also $domain ist wohl eine globale Variable und trotzdem kann ich sie mit global $domain nicht aufrufen. Vielleicht ist sie dann ja keine. Ich habe das nicht studiert oder so. Nein ich kann mir hier nicht Seitenlang alle Links durchlesen und ja ich bin hier kein Superexperte und weiß auch um die Schwierigkeit jemandem zu helfen finde es aber schlecht einen hier als doof und kapierfaul darzustellen.
wenn ich die funktion mit
function getContentCat($catid, $limit, $temp = "ohne"){
echo $temp;
}
aufrufe bekomme ich
Warning: Cannot modify header information - headers already sent by
Hilft das vielleicht?
cu
sahra
Mahlzeit Sahra,
also $domain ist wohl eine globale Variable
Das kann sein - ich kenne Deinen Code nicht, also kann ich das nicht beurteilen.
und trotzdem kann ich sie mit global $domain nicht aufrufen.
Eine Variable kann man nicht "aufrufen" - man kann ihr einen Wert zuweisen oder sich den Wert, der im Moment in der Variable steckt, zurückgeben lassen. Das Schlüsselwort "global" kannst Du benutzen, wenn Du in einer Funktion explizit globale Variablen benutzen willst - allerdings verstehe ich nicht, warum Du das in diesem Zusammenhang benutzen möchtest. Hier sei zum Verständnis nochmal ein Verweis auf das Kapitel zum Geltungsbereich von Variablen in der PHP-Dokumentation erlaubt (ja, es gibt die Seiten auch auf deutsch).
Vielleicht ist sie dann ja keine. Ich habe das nicht studiert oder so. Nein ich kann mir hier nicht Seitenlang alle Links durchlesen und ja ich bin hier kein Superexperte und weiß auch um die Schwierigkeit jemandem zu helfen finde es aber schlecht einen hier als doof und kapierfaul darzustellen.
Ich stelle Dich nicht als doof oder kapierfaul dar. Es ist nur so, dass man ein gewisses Grundverständnis von einer Programmiersprache haben muss, wenn man sie benutzen will. Es hilft wenig, wenn man von anderen irgendwelche Beispiele oder Code-Bröckchen aufklaubt und notdürftig zusammensetzt - zumindest die Grundlagen wirst Du dir aneignen MÜSSEN, wenn Du verstehen willst, was Du tust, und um auch eigenständig Dinge entwickeln zu können. Wenn Du dazu keine Lust oder Zeit hast, hast Du im Prinzip nur zwei Möglichkeiten:
1.) Du suchst Dir im Netz irgendwelchen Code zusammen, der augenscheinlich das tut, was Du möchtest, und strickst diesen irgendwie zusammen ... in der Hoffnung, das alles funktioniert.
2.) Du suchst und findest jemanden, der Dir funktionierenden Code gibt - wobei gilt: je weniger dieser jemand dafür haben will, desto sorgfältiger solltest Du den Code prüfen.
Dazu musst Du kein Superexperte sein, aber zumindest die Grundlagen solltest Du verstanden haben - und aufgrund Deiner bisherigen Beiträge scheint es mir so, als ob das nicht der Fall ist.
wenn ich die funktion mit
function getContentCat($catid, $limit, $temp = "ohne"){
echo $temp;
}aufrufe
So rufst Du keine Funktion auf - so deklarierst Du eine Funktion. Dir fehlen wirklich elementare Grundlagen von PHP. Eigne Dir diese zunächst an. Es hat wenig Sinn, den 12. Schritt vor dem 1. zu tun - ein Haus fängt man auch nicht mit dem Dachfirst an, sondern mit dem Fundament.
bekomme ich
Warning: Cannot modify header information - headers already sent by
1. ist diese Fehlermeldung unvollständig und 2. hätte Dir eine simple Suche auf der allwissenden Müllhalde die Information gebracht, dass das ein Problem ist, das an einer ganz anderen Stelle auftritt.
Hilft das vielleicht?
Nein, nicht wirklich. Was in der Tat helfen würde, wäre
1.) die Einsicht Deinerseits, dass es ohne Grundlagenwissen generell nicht geht und
2.) endlich mal relevanter Quellcode (keine Beispiel-Einzeiler, sondern mal aussagekräftige Teile Deines Codes im Zusammenhang).
MfG,
EKKi
echo $begrüßung;
Das Problem ist mit den geringen Informationen und den dürftigen Antworten nicht nachvollziehbar. Bitte versuch doch mal, das Problem in einer neuen Datei mit dem geringstmöglichen Code nachzuvollziehen. Wenn der Fehler dabei auch auftritt, poste den Code im Ganzen, inklusive der Anweisungen für deine Kontrollausgaben.
echo "$verabschiedung $name";
Moin!
Aufruf:
$front_vid = getContentCat($front_vid_id, $x, $domain);
Welchen Wert hat $domain an dieser Stelle?
- Sven Rautenberg