Zurück   Flashforum > Flash und Server > PHP und MySQL

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-06-2004, 10:29   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Beiträge: 145
Question oop - funktionsaufruf + argumente?

hallo, ich beschäftige mich gerade mit meinem ersten oop-projekt, und habe ein problem (...)

ich habe eine beliebige klasse (CLASS_NAME) mit einer funktion drinne (funktion($arg1,$arg2,$arg3))...

ich starte den konstruktor mittels
PHP-Code:
$var = new CLASS_NAME;
$funktions_aufruf $var->funktion($arg1,$arg2,$arg3); 
jetzt bekomme ich ständig die fehlermeldung, Warning: Missing Argument... usw.

die argumente sind aber definitiv angegeben...

was muss ich beachten, damit das ganze wie gewünscht funkt?

gruß + dank!
__________________
23.000th FF-Member :)
greener ist offline   Mit Zitat antworten
Alt 21-06-2004, 10:38   #2 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
wenn dein konstruktor ein argument erwartet, darfst du ihn nicht so aufrufen

nehmen wir also an:

PHP-Code:
class myClass {
  
  function 
myClass() {
    
// 
  
}
   function 
myFunction($arg1$arg2) {
    
//
  
}
}

// gültige aufrufe:
$cla = new myClass();
$cla2 = new myClass;

$cla -> myFunction("hallo","welt"); 
sieht aber der konstruktor so aus:

PHP-Code:

class myClass2 {
 
  function 
myClass2($arg) {

  }
  function 
myFunction($arg1,$arg2,$arg3) {

  }

}

// ungültig:
$my = new myClass2;

// gültig:
$my = new myClass2("");
// gültig:
$my = new myClass2($hjell);
$my -> myFunction($one,$two,$three); 
solltest dir vielleicht gleich angewöhnen, eine klasse immer mit klammern zu initialisieren, also nicht $my = new Class; sondern $my = new Class(); -- auch wenn die klammern manchmal nicht nötig sind, ist es schönerer und eindeutigerer code.
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 21-06-2004, 10:46   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Beiträge: 145
Zitat:
Zitat von rechtschreibfan
PHP-Code:
// gültig:
$my = new myClass2("");
// gültig:
$my = new myClass2($hjell);
$my -> myFunction($one,$two,$three); 
hm, erschließt sich mir noch nicht ganz:

warum muss ich die klasse mit klammern aufrufen? [new myClass2("")]
und
was bewirkt: $my = new myClass2($hjell);

?

vielen dank aber schon mal


edit:tatsächlich: wenn ich die klasse per new CLASS_NAME('','',''); aufrufe funktioniert es, aber warum es so sein muss, leuchtet mir nicht ein?!
__________________
23.000th FF-Member :)

Geändert von greener (21-06-2004 um 10:53 Uhr)
greener ist offline   Mit Zitat antworten
Alt 21-06-2004, 10:54   #4 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
naja... es geht nur darum: der konstruktor einer klasse wird, so er denn existiert (einfach eine funktion in der klasse, die den selben namen wie die klasse selbst trägt), auf jeden fall aufgerufen, wenn du die klasse mit "new" initialisierst; und zwar immer bevor alles andere passiert.

wenn also dein konstruktor argumente erwartet, du die klasse aber ohne argumente aufrufst, erzeugst du ein warning.

vielleicht solltest du deine klasse mal hier posten - was intern passiert ist jetzt auch nicht wichtig, das könntest du zu zwecken der lesbarkeit rauslassen. nur die funktions-köpfe sind wichtig. dann können wir mal anschauen, was passiert und wo der fehler liegen könnte.
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 21-06-2004, 10:59   #5 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Beiträge: 145
ok:

PHP-Code:
class DB_ACTION {
    function 
db_connect($server,$user,$password,$database)
    {
        
//
    
}
    function 
db_action($action,$table,$extra,$array_type,$addkey=0)
    {
        
//
    
}

mein aufruf:

PHP-Code:
        // so funkts:
        
$db = new DB_ACTION('','','','');
        
// so nicht:
        
$db = new DB_ACTION;
        
$connection $db->db_connect('localhost','root','','zeiterfassung');

        
//$act = new DB_ACTION;
        
$result $db->db_action('INSERT','work_entries',$tmp_arr,''); 
die db-funktionen werden in einer weiteren klasse aufgerufen, was aber keine rolle spielen sollte, oder?
__________________
23.000th FF-Member :)

Geändert von greener (21-06-2004 um 11:01 Uhr)
greener ist offline   Mit Zitat antworten
Alt 21-06-2004, 11:08   #6 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
na da haben wir's ja schon.

die klasse db_action hat einen konstruktor, der db_action($action,$table,$extra,$array_type,$addke y=0) heißt und einige argumente haben will ... hier ist es wohl etwas verwirrend, dass die klasse großgeschrieben ist und der konstruktor 1. nicht an der ersten stelle steht und 2. klein geschrieben ist. php wird wohl den groß- kleinschreibefehler ignorieren (was es eigentlich nicht sollte ) und bei initialisierung mit "new" versuchen, die funktion db_action aufzurufen. und weil die mehrere argumente erwartet, bekommst du ein warning.


tipp:

1. achte peinlichst genau auf die groß- und kleinschreibung. das spart dir viele bugs
2. die mehrheit der oop-leute haben sich eine bestimmte art angewöhnt, klassennamen auszuwählen. die form lautet:
"DiesIstEinGuterKlassenName" und nicht "dies_ist_ein_guter_klassenname" oder "DIES_IST_EIN_GUTER_KLASSENNAME".

großbuchstaben mit underscore ist für "konstanten" reserviert.

richtig wäre also eher "DbAction", und dein konstruktor sollte am besten die erste funktion innerhalb der klasse sein, und ebenfalls "DbAction" heißen.

alle anderen methoden in der klasse sollten mit kleinbuchstaben beginnen, und dann diese groß-klein-schreibung beherzigen. underscores "_" in funktionsnamen sind für echte "funktionen" reserviert, die nicht an klassen gebunden sind, z.b. integrierte funktionen in php oder selbst geschriebene funktionen.

mit diesen tipps erhöhst du die lesbarkeit deines codes enorm ... und andere können dir leichter und schneller helfen.
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 21-06-2004, 11:11   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Beiträge: 145
hm, das leuchtet ein, ich danke vielmalös und experimentiere mal weiter
__________________
23.000th FF-Member :)
greener ist offline   Mit Zitat antworten
Alt 21-06-2004, 11:12   #8 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
das problem liegt daran das du dir bisher nicht bewusst warst das eine funktion innerhalb der klasse die genau so heißt wie deine klasse (case ist egal) als konstruktor gild. du musst lediglich die zweite funktion umbenennen und es wird erstmal so laufen wie gewünscht
elias ist offline   Mit Zitat antworten
Alt 21-06-2004, 11:17   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Beiträge: 145
schon geschehen bzw hab die klasse umbenannt
__________________
23.000th FF-Member :)
greener ist offline   Mit Zitat antworten
Alt 21-06-2004, 11:47   #10 (permalink)
Inventar
 
Benutzerbild von Nightflyer
 
Registriert seit: Jul 2002
Beiträge: 6.882
Gibts irgendwo ein gutes Tut für OOP in PHP? Ich hab irgendwie das Gefühl da was zu verpassen
__________________
(\__/)
(='.'=)
(")_(")
Nightflyer ist offline   Mit Zitat antworten
Alt 21-06-2004, 12:44   #11 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
war nur zu langsam @greener

@nightflyer
schreibe gerade an einem PHP OOP tutorial, wennde bischen geduldig bist kannste mir vielleicht sagen obs brauchbar ist
elias ist offline   Mit Zitat antworten
Alt 21-06-2004, 12:57   #12 (permalink)
Inventar
 
Benutzerbild von Nightflyer
 
Registriert seit: Jul 2002
Beiträge: 6.882
Zitat:
Zitat von binary blade
@nightflyer
schreibe gerade an einem PHP OOP tutorial, wennde bischen geduldig bist kannste mir vielleicht sagen obs brauchbar ist
Unbedingt, wenn ich's dann schnalle ist's gut, sonst nicht
__________________
(\__/)
(='.'=)
(")_(")
Nightflyer ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele