|
| 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/
| |
|
|