Kom ihåg mig?
Home Menu

Menu


Classer i PHP

 
Ämnesverktyg Visningsalternativ
Oläst 2009-06-23, 11:50 #1
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Okej, kort fråga.
Vad är det för skillnad på nedanstående exempel?

Kod:
class makeDate{
	var $Rawdate;
	var $Date;
	
	var $Format;
	var $Language;
	
	var $Timestamp;
	
	function makeDate(){
 *//Default settings
 *$this->Rawdate = date('YmdHis');
 *$this->Format = 'Y-m-d H:i';
 *$this->Language = 'sv';
	}
}
och

Kod:
class makeDate{
	var $Rawdate *= date('YmdHis');;
	var $Date;
	
	var $Format = 'Y-m-d H:i';
	var $Language = 'sv';
	
	var $Timestamp;
}
Vad jag läst så är det "korrekt" att skapa en funktion med samma namn (constructor) som classen .
Är det fel att sätta standard värden utanför som i exempel 1?
Vad ska man ha "constructor" funktionen till?

Tack!
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 12:00 #2
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Nej, jag tror inte det är fel att sätta värden direkt. Du kan även göra det utanför klassen.

Exempel:
Citat:

$Date = new makeData(date('YmdHis'), sv);
Detta tas då emot av din constructor..
Du kan även göra..
Citat:

$Date = new makeData();
$Date->Rawdate *= date('YmdHis');
Gällande ditt namn av constructorn (makeDate) så tror jag du ska använda dig av __constructor istället för att constructorn är namnet som klassen.. Båda fungerar men jag tror __constructor är PHP5(?)

Constructor funktionen är det första som anropas i objektet, vad du ska ha den till är upp till dig
Jimpsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 13:00 #3
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Citat:
Originally posted by grinditwp@Jun 23 2009, 11:50

Vad jag läst så är det korrekt att skapa en funktion med samma namn (constructor) som classen .
Är det fel att sätta standard värden utanför som i exempel 1?
Vad ska man ha constructor funktionen till?
Tack
I PHP4 så är det korrekt att skapa en funktion med samma namn som classen som constructor.
I PHP5 så är det felaktigt, där skall man använda __construct() (och det finns även en __destruct() som körs när scriptet är klart)
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 13:36 #4
Ristorasto Ristorasto är inte uppkopplad
Medlem
 
Reg.datum: Mar 2006
Inlägg: 90
Ristorasto Ristorasto är inte uppkopplad
Medlem
 
Reg.datum: Mar 2006
Inlägg: 90
Citat:
Ursprungligen postat av Jonas
Citat:
Ursprungligen postat av grinditwp
Vad jag läst så är det korrekt att skapa en funktion med samma namn (constructor) som classen .
Är det fel att sätta standard värden utanför som i exempel 1?
Vad ska man ha constructor funktionen till?
Tack *

I PHP4 så är det korrekt att skapa en funktion med samma namn som classen som constructor.
I PHP5 så är det felaktigt, där skall man använda __construct() (och det finns även en __destruct() som körs när scriptet är klart)
Felaktigt och felaktigt.. det är fullt möjligt att använda en konstruktor som har samma namn som klassen i PHP5, dock är det ju att föredra och nyttja __construct() för att undvika programfel vid byte av klassnamn el. dyl. Skulle ingen __construct() finnas så kommer tolken att leta efter konstruktorn med samma namn som klassen.

Att sedan instansiera variabler i konstruktorn istället för direkt som privata fält har nog ingen större skillnad prestandamässigt sett. Dock kan det ju vara en fördel att ha instansieringen (ursprungsvärdena) i konstruktorn om man behöver "nollställa" instansen, eller om man använder sig av statiska fält som skall ändra värde när fler instanser skapas upp.

Ristorasto är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 13:53 #5
greenio.se greenio.se är inte uppkopplad
Medlem
 
Reg.datum: May 2009
Inlägg: 106
greenio.se greenio.se är inte uppkopplad
Medlem
 
Reg.datum: May 2009
Inlägg: 106
Jag tycker det är bra att sätta eventuella defaultvärden direkt när man skapar klass-variabeln.

Konstructorn har ju däremot ofta tillgång till någon form av indata och med hjälp av den kan man uppdatera defaultvärdena man satt om det behövs och sätta andra variabler med hjälp av indatan.
greenio.se är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 14:45 #6
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
tack.

Vad är det för mening med private och dylikt?
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 15:04 #7
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Jimpsson Jimpsson är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 428
Private kan bara anropas inom klassen, inte utifrån dvs.
Jimpsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 15:12 #8
greenio.se greenio.se är inte uppkopplad
Medlem
 
Reg.datum: May 2009
Inlägg: 106
greenio.se greenio.se är inte uppkopplad
Medlem
 
Reg.datum: May 2009
Inlägg: 106
du har public, private och protected att välja på.

public går som namnet antyder att kalla på var som helst ifrån egentligen
private går bara att kalla på från den aktuella klassen
protected går att kalla på från den aktuella klassen och klasser som ärver från den

protected brukar jag använda för det mesta.
greenio.se är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 15:20 #9
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
Citat:
Originally posted by Jonas@Jun 23 2009, 13:00
[...] och det finns även en __destruct() som körs när scriptet är klart.
Korrigering: __desctruct() anropas när objektet unsettas, vilket inte nödvändigtvis behöver vara när scriptet är färdigkört.
Jonathan P är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-23, 16:56 #10
thorsells avatar
thorsell thorsell är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 295
thorsell thorsell är inte uppkopplad
Medlem
thorsells avatar
 
Reg.datum: Feb 2004
Inlägg: 295
Här finns liten snabbuppdatering för PHP5 och klasser: Introduktion till PHP5
thorsell är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 08:58.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017