WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Classer i PHP (https://www.wn.se/forum/showthread.php?t=37543)

grinditwp 2009-06-23 11:50

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! :)

Jimpsson 2009-06-23 12:00

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 :)

Jonas 2009-06-23 13:00

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)

Ristorasto 2009-06-23 13:36

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.

:rolleyes:

greenio.se 2009-06-23 13:53

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.

grinditwp 2009-06-23 14:45

tack.

Vad är det för mening med private och dylikt?

Jimpsson 2009-06-23 15:04

Private kan bara anropas inom klassen, inte utifrån dvs.

greenio.se 2009-06-23 15:12

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.

Jonathan P 2009-06-23 15:20

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.

thorsell 2009-06-23 16:56

Här finns liten snabbuppdatering för PHP5 och klasser: Introduktion till PHP5


Alla tider är GMT +2. Klockan är nu 11:56.

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