/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
constants og if
Fra : Martin


Dato : 01-10-09 03:37

Hey..

Jeg har lavet mig en lille klasse, sjovt nok
Anyways

class {
const LESS_THAN = '<';
const HIGHER_THAN = '>';
const EQUALS_THAN = '==';

public function ($this, $that)
{

if ($this self::LESS_THAN $that) {
// DO THIS
}

}

}

Dette giver en
parse error: syntax error, unexpected T_VARIABLE
er der nogle der har en idé til hvordan man ellers kan gøre dette?

Jeg har også prøvet med
if ($this (self::LESS_THAN) $that) {
og andre af samme slags rundt omkring har også prøvet med
if ($this (string self::LESS_THAN) $that) {
men det dur heller ikke...

Og nej, helst ikke noget med if eller switch, det ville jo være dumt :)
(og ja, det kunne sagtens være der kom mere end de 3 konstanter end der
er nu

 
 
Jonathan Stein (01-10-2009)
Kommentar
Fra : Jonathan Stein


Dato : 01-10-09 10:12

Martin skrev:

> if ($this self::LESS_THAN $that) {

En konstant kan du altid bytte direkte ud med definitionen. Ovenstående
svarer altså i dit eksempel til at skrive:

if ($this '<' $that) {

Du kunne bruge konstanten til at sammensætte en streng, som du kan
evaluere med "eval" (http://www.php.net/manual/en/function.eval.php),
men det er noget rigtig snavs.

Hvis det er et praktisk problem, er jeg næsten sikker på, at der er en
bedre løsning.

M.v.h.

Jonathan

--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/

Martin (01-10-2009)
Kommentar
Fra : Martin


Dato : 01-10-09 12:01

Jonathan Stein wrote:
> Martin skrev:
>
>> if ($this self::LESS_THAN $that) {
>
> En konstant kan du altid bytte direkte ud med definitionen. Ovenstående
> svarer altså i dit eksempel til at skrive:
>
> if ($this '<' $that) {
>
> Du kunne bruge konstanten til at sammensætte en streng, som du kan
> evaluere med "eval" (http://www.php.net/manual/en/function.eval.php),
> men det er noget rigtig snavs.

Ja puhada, eval er ond :)

>
> Hvis det er et praktisk problem, er jeg næsten sikker på, at der er en
> bedre løsning.

Nææ det er nu ikke et praktisk problem, men bare hamrende irriterende
hvis man nu finder på en ny konstant - hader at skulle opdaterer flere
steder hehe

http://php.pastebin.com/f3950af20
Linje: 215

Jonathan Stein (01-10-2009)
Kommentar
Fra : Jonathan Stein


Dato : 01-10-09 13:23

Martin skrev:

> http://php.pastebin.com/f3950af20

Fordi livet er for kort til "strtotime"?

M.v.h.

Jonathan

--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/

Martin (02-10-2009)
Kommentar
Fra : Martin


Dato : 02-10-09 10:05

Jonathan Stein wrote:
> Martin skrev:
>
>> http://php.pastebin.com/f3950af20
>
> Fordi livet er for kort til "strtotime"?

Det er så netop præcis modsat af strtotime :)
Altså at man fyrer et timestamp ind i klassen og man så fx. kan få
"næste torsdag" eller "long long time ago, in a far far galaxy" retur.

Jonathan Stein (03-10-2009)
Kommentar
Fra : Jonathan Stein


Dato : 03-10-09 13:17

Martin skrev:

>>> http://php.pastebin.com/f3950af20
>> Fordi livet er for kort til "strtotime"?
>
> Det er så netop præcis modsat af strtotime :)

Ah. Uden at have kigget nærmere på koden gættede jeg på, at du havde en
større date/time pakke, hvor du selv ville have mere kontrol over strtotime.

M.v.h.

Jonathan

--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/

Bertel Lund Hansen (01-10-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 01-10-09 10:14

Martin skrev:

> class {
> const LESS_THAN = '<';
> const HIGHER_THAN = '>';
> const EQUALS_THAN = '==';

> public function ($this, $that)
> {

> if ($this self::LESS_THAN $that) {
> // DO THIS
> }

> }
> }

Det er stort set totalt forkert.

1. En klasse skal have et navn. Jeg bruger den konvention at
klassenavne begynder med stort, variable skrives helt med småt,
og definerede konstanter skrives helt med stort. Det er en
vilkårlig konvention, men når først den er valgt, gør den
arbejdet og læsningen lettere.

class Test {
}

2. Sådan definerer man ikke konstanter.

Universel konstant:
   define ('LESS_THAN', '<'); // I koden bruger man så LESS_THAN

Klassekonstant
class Test {
   var $less_than = '<';
}

3. En funktion skal også have et navn

class Test {
   var $less_than = '<';
   var $greater_than = '>';
   var $equals = '=';
   function experiment ($first,$second) {
      if $first<$second)
         echo "$first ".$this->less_than." $second\n";
   }
}

I koden:

   $klasse=new Test();
   $klasse->experiment(5,7);

4. $this bør ikke bruges som variabel da det har en reserveret
betydning.

5. Du kan ikke give en variabel en værdi og så bruge den som
operator.
   if ($this self::LESS_THAN $that)

Der *skal* stå <, og ikke andet.

6. Glem alt om self.

Og et råd:
Glem klasser og lær det grundlæggende inden for PHP først.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Jonathan Stein (01-10-2009)
Kommentar
Fra : Jonathan Stein


Dato : 01-10-09 10:35

Bertel Lund Hansen skrev:

> 2. Sådan definerer man ikke konstanter.

PHP har fået klasse-konstanter (jeg mener de kom i PHP 5), så lige
præcis den del var ok.
http://www.php.net/manual/en/language.oop5.constants.php

M.v.h.

Jonathan

--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/

Peter Farsinsen (01-10-2009)
Kommentar
Fra : Peter Farsinsen


Dato : 01-10-09 10:40

Bertel Lund Hansen wrote:
> 2. Sådan definerer man ikke konstanter.

> Klassekonstant
> class Test {
>    var $less_than = '<';
> }

Dit forslag har ikke noget med en konstant at gøre. Din variable er
public, så den kan altid ændres. Den kan ikke blive meget mindre
konstant. Konstanter defineres i en klasse som: const NAVN = 'værdi';

> 6. Glem alt om self.

Nej. Man refererer til en konstant i en klasse med self::NAVN;

> Og et råd:
> Glem klasser og lær det grundlæggende inden for PHP først.

De eneste fejl her er at variable ikke kan bruges som operator og at
$this er hellig. Der er, i min mening, ingen grund til at glemme klasser.

--
Peter Farsinsen
fornavn@efternavn.dk

Martin (01-10-2009)
Kommentar
Fra : Martin


Dato : 01-10-09 11:54

Bertel Lund Hansen wrote:
> Martin skrev:
>
>> class {
>> const LESS_THAN = '<';
>> const HIGHER_THAN = '>';
>> const EQUALS_THAN = '==';
>
>> public function ($this, $that)
>> {
>
>> if ($this self::LESS_THAN $that) {
>> // DO THIS
>> }
>
>> }
>> }
>
> Det er stort set totalt forkert.
>
> 1. En klasse skal have et navn. Jeg bruger den konvention at
> klassenavne begynder med stort, variable skrives helt med småt,
> og definerede konstanter skrives helt med stort. Det er en
> vilkårlig konvention, men når først den er valgt, gør den
> arbejdet og læsningen lettere.

Nå ja, klokken var 04:30 og skrevet direkte - livet er for kort til
copy/paste :)

>
> class Test {
> }
>
> 2. Sådan definerer man ikke konstanter.

Jo da...

>
> Universel konstant:
>    define ('LESS_THAN', '<'); // I koden bruger man så LESS_THAN

Jeg ville ikke lave universelle, konstanten skal kun kunde findes i
klassen og ingen andre steder.

>
> Klassekonstant
> class Test {
>    var $less_than = '<';
> }

Nope, det er ikke en konstant, men en variabel :) (public er den også..)

>
> 3. En funktion skal også have et navn

Det er jeg helt enig med dig i - igen, gik pænt stærkt, og jeg var lidt
små irriteret høhø :)

>
> 4. $this bør ikke bruges som variabel da det har en reserveret
> betydning.

Agree on that!

>
> 5. Du kan ikke give en variabel en værdi og så bruge den som
> operator.
>    if ($this self::LESS_THAN $that)
>
> Der *skal* stå <, og ikke andet.

Nope, det er så også det som jeg leder efter en løsning på, for det skal
virke - man kunne også lave en user_func, må jeg lige tænke over når jeg
bliver lidt mere klar i hjernen :)

>
> 6. Glem alt om self.

Uhh, nej da!
self bruges ved statiske metoder/variabler/konstanter

>
> Og et råd:
> Glem klasser og lær det grundlæggende inden for PHP først.
>

Nå nå... jaja, med 7 års erfaring :)
Ja, alt bliver lort når klokken er lort hehe...
Men synes nu mit lille natte projekt blev meget fint
http://php.pastebin.com/f507ba6a3
Omkring linje 215...

Mads Lie Jensen (01-10-2009)
Kommentar
Fra : Mads Lie Jensen


Dato : 01-10-09 12:06

On Thu, 01 Oct 2009 12:54:23 +0200, Martin <maaNO@SPAMscandesigns.dk>
wrote:

>> operator.
>>    if ($this self::LESS_THAN $that)
>>
>> Der *skal* stå <, og ikke andet.
>
>Nope, det er så også det som jeg leder efter en løsning på, for det skal
>virke - man kunne også lave en user_func, må jeg lige tænke over når jeg
>bliver lidt mere klar i hjernen :)

Hvad vil du opnå?

Risikoen for at mindre-end-operatoren i php pludselig bliver lavet om
til noget andet end < er ret lille, så det eneste du vil få ud af dit
forsøg er at skulle skrive rigtig mange tegn i din kode
(self::LESS_THAN)i stedet for eet enkelt (<).

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Martin (02-10-2009)
Kommentar
Fra : Martin


Dato : 02-10-09 10:03

Mads Lie Jensen wrote:
> On Thu, 01 Oct 2009 12:54:23 +0200, Martin <maaNO@SPAMscandesigns.dk>
> wrote:
>
>>> operator.
>>>    if ($this self::LESS_THAN $that)
>>>
>>> Der *skal* stå <, og ikke andet.
>> Nope, det er så også det som jeg leder efter en løsning på, for det skal
>> virke - man kunne også lave en user_func, må jeg lige tænke over når jeg
>> bliver lidt mere klar i hjernen :)
>
> Hvad vil du opnå?
>
> Risikoen for at mindre-end-operatoren i php pludselig bliver lavet om
> til noget andet end < er ret lille, så det eneste du vil få ud af dit
> forsøg er at skulle skrive rigtig mange tegn i din kode
> (self::LESS_THAN)i stedet for eet enkelt (<).

Det rigtigt, meeen nu kunne det jo være der kom mere end de 3 alm., der
kunne måske komme en LIKE, IN (altså som der også er i mysql) eller lign.

Bertel Lund Hansen (01-10-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 01-10-09 12:26

Martin skrev:

> > 2. Sådan definerer man ikke konstanter.

> Jo da...

Okay, der var noget jeg ikke vidste.

> Nope, det er så også det som jeg leder efter en løsning på, for det skal
> virke - man kunne også lave en user_func, må jeg lige tænke over når jeg
> bliver lidt mere klar i hjernen :)

Jeg ville lave en user-function.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste