Versio

Class opzetten

Overzicht Reageren

Eddy Erkelens

Eddy Erkelens

26/07/2008 15:29:00
Quote Anchor link
Ik ben bezig met mijn eerste class en dat werkt wel... maar nu wil ik een paar variableen opgeven.
En dat schijnt niet te mogen:

Ik wil:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
class getal_naar_geschreven
    {
    $getal[0] = "nul";
    $getal[1] = "een";
    $getal[2] = "twee";
    $getal[3] = "drie";
    $getal[4] = "vier";
    // etc
 
            // en dan wat andere functies die het wel doen
            }


Maar ik krijg dus gelijk deze foutmelding:
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in /home/zunflappi/domains/zunflappie.nl/public_html/temp/getal_naar_geschreven.php on line 7
Lijn 7 is waar ik $getal[0] definieer.

Wat doe ik verkeerd?
Public / static / protected ervoor etc helpt ook niet.
eerst $getal = array(); werkt ook niet.




// edit
Heb het direct in een volledige array gestoken (veel werk en onoverzichtelijker, maar het werkt)... maar hoe kan ik deze array nou gebruiken in de functies?
Direct $getal aanroepen kan niet, want dan zegt PHP dat die niet bestaat.
Ik heb er "public" voor staan.... (en static/private werken ook niet).
Gewijzigd op 01/01/1970 01:00:00 door Eddy Erkelens
 
PHP hulp

PHP hulp

24/05/2012 00:49:50
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Jelmer rrrr

Jelmer rrrr

26/07/2008 15:34:00
Quote Anchor link
Je kan bij het declareren van properties maar een heel beperkte syntax gebruiken. Je kan bijvoorbeeld wel als strings en nummertjes toewijzen, en zelfs arrays. Maar je kan geen functies of andere evaluaties uitvoeren. Gelukkig hebben we __construct() daarvoor nog :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
class getal_naar_geschreven {
   protected $getal = array('nul', 'een', 'twee', 'drie', 'vier');
}

?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class getal_naar_geschreven {
   protected $getal = array();

   public function __construct() {
      $getal[0] = 'nul';
      $getal[1] = 'een';
      $getal[2] = 'twee';
      $getal[3] = 'drie';
      $getal[4] = 'vier';
   }
}

?>
 
Eddy Erkelens

Eddy Erkelens

26/07/2008 15:39:00
Quote Anchor link
Dank u voor de snelle reactie.

Die __construct() wordt automatisch uitgevoerd?
Want dan kan het natuurlijk ook (wel zo netjes).


Edit:

Nu krijg ik alsnog de variable $getal niet aangeroepen in een functie.
Ook als ik public van maak werkt dat niet.
Gewijzigd op 01/01/1970 01:00:00 door Eddy Erkelens
 
Jelmer rrrr

Jelmer rrrr

26/07/2008 15:48:00
Quote Anchor link
__construct wordt aangeroepen zodra je een nieuwe instantie maakt van de klasse:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$schrijver
= new getal_naar_geschreven(); // -> daar wordt je __construct aangeroepen

$instantie = new klasse($arg1, $arg2);
// PHP doet als het ware nu automatisch deze regel erna:
$instantie->__construct($arg1, $arg2);
?>


En ik zie dat ik net een foutje heb gemaakt in mijn voorbeeld. In PHP benader je properties van het instantie waar een method aan gekoppeld is via $this. Voorbeeldje 2 moet dus zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class getal_naar_geschreven {
   protected $getal = array();

   public function __construct() {
      $this->getal[0] = 'nul';
      $this->getal[1] = 'een';
      $this->getal[2] = 'twee';
      $this->getal[3] = 'drie';
      $this->getal[4] = 'vier';
   }
}

?>
 
Eddy Erkelens

Eddy Erkelens

26/07/2008 15:59:00
Quote Anchor link
Dit werkt.

Ik ging nogal de fout in met $this->$getal[], wat natuurlijk niet mag.
Bedankt voor zover.
 
Emmanuel Delay

Emmanuel Delay

26/07/2008 16:15:00
Quote Anchor link
Wanneer je met classes werkt, moet je object georiƫnteerd denken.

Enerzijds maak je een klasse. Een klasse bevat properties (variabelen binnen de klasse) en methods (functies binnen een klasse).

Anderzijds gebruik je die klasse. Dat doe je door objecten te maken van die klasse.

Een klasse op zich voert niets uit. Het is pas wanneer je een object maakt van die klasse dat je de properties en methods gebruikt.

Alles wat gebeurt binnen een klasse, moet gebeuren binnen methods. Buiten de methods is het enkel de bedoeling dat je properties declareert.
 
Eddy Erkelens

Eddy Erkelens

26/07/2008 16:33:00
Quote Anchor link
Het werkt reeds.
Ik dacht dat je nog wel enige hierachie had, dus met inspringen met { etc.
Maar dat blijkt dus geen invloed te hebben.

Uiteraard moeten de {} wel goed staan natuurlijk :D.
 
Emmanuel Delay

Emmanuel Delay

26/07/2008 17:29:00
Quote Anchor link
Inspringen heeft nooit een invloed. Je kan een volledige site schrijven op 1 lijn. Geen enkel probleem.

Het is gewoon een slecht idee.

Inspringen, is een techniek die enkel dient om beter aan je eigen (of andermans') code uit te raken.
 
Eddy Erkelens

Eddy Erkelens

26/07/2008 19:00:00
Quote Anchor link
Bedoelde niet zozeer het inspringen van de php-code maar meer het meervoudig gebruik van {{{}{}}}{} etc.

Weet iemand toevallig de limiet van de int-getallen van php?
Of is dat 256's negens achter elkaar?
 
GaMer B

GaMer B

26/07/2008 19:29:00
Quote Anchor link
Van intval:

Quote:
"The maximum value depends on the system. 32 bit systems have a maximum signed integer range of -2147483648 to 2147483647. So for example on such a system, intval('1000000000000') will return 2147483647. The
maximum signed integer value for 64 bit systems is 9223372036854775807."


Het hangt dus maar net af van welk bit systeem je hebt. 32 of 64 bit.
 
Eddy Erkelens

Eddy Erkelens

26/07/2008 20:01:00
Quote Anchor link
Aha... dan weet ik tot hoever ik moet gaan met mijn nieuwe class.

Maarrr.... wat ik nu aan het typen ben (was al bij 13 getallen achter elkaar) ben ik niet slim in elkaar aan het zetten.
Dit moet ook met een for-loop kunnen, maar ik kom er even niet meer uit.
Iemand een goede vervanger?
Dus vanaf (strlen=6 t/m strlen=18)?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php // per lengte laten verschillen
        if(strlen($int) == 1)
            {
return $this->exec_1($int);    }
        if(strlen($int) == 2)
            {
return $this->exec_2($int);    }
        if(strlen($int) == 3)
            {
return $this->exec_3($int);    }
        if(strlen($int) == 4)
            {

            $deel[] = $this->exec_2(substr($int, 0, 2)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_2(substr($int, 2, 2));            
            return implode("", $deel);
            }

        if(strlen($int) == 5)
            {

            $deel[] = $this->exec_2(substr($int, 0, 2)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 2, 3));            
            return implode("", $deel);
            }

        if(strlen($int) == 6)
            {

            $deel[] = $this->exec_3(substr($int, 0, 3)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 3, 3));            
            return implode("", $deel);
            }
    
        if(strlen($int) == 7)
            {

            $deel[] = $this->exec_1(substr($int, 0, 1)) . $this->space . $this->getal[1000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 1, 3)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 5, 3));            
            return implode("", $deel);
            }

        if(strlen($int) == 8)
            {

            $deel[] = $this->exec_2(substr($int, 0, 2)) . $this->space . $this->getal[1000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 3, 3)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 6, 3));            
            return implode("", $deel);
            }

        if(strlen($int) == 9)
            {

            $deel[] = $this->exec_3(substr($int, 0, 3)) . $this->space . $this->getal[1000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 3, 3)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 6, 3));            
            return implode("", $deel);
            }

        if(strlen($int) == 10)
            {

            $deel[] = $this->exec_1(substr($int, 0, 1)) . $this->space . $this->getal[1000000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 1, 3)) . $this->space . $this->getal[1000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 4, 3)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 7, 3));            
            return implode("", $deel);
            }

        if(strlen($int) == 11)
            {

            $deel[] = $this->exec_2(substr($int, 0, 2)) . $this->space . $this->getal[1000000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 2, 3)) . $this->space . $this->getal[1000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 5, 3)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 8, 3));            
            return implode("", $deel);
            }

        if(strlen($int) == 12)
            {

            $deel[] = $this->exec_3(substr($int, 0, 3)) . $this->space . $this->getal[1000000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 3, 3)) . $this->space . $this->getal[1000000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 6, 3)) . $this->space . $this->getal[1000] . $this->space;
            $deel[] = $this->exec_3(substr($int, 9, 3));            
            return implode("", $deel);
            }
        }
?>


Let op dat het eerste deel de eerste keer dus exec_1 uitvoert met 1 teken, de ronde daarna exec_2 met 2 tekens en de derde keer exec_3 met 3 tekens. Daarna dus weer beginnen met 1.

En voor de raders: het wordt inderdaad een functie om getallen (tot 9223372036854775807) om te zetten naar tekst.
Zie http://www.zunflappie.nl/temp/getal_naar_geschreven.php
Gewijzigd op 01/01/1970 01:00:00 door Eddy Erkelens
 



Overzicht Reageren

Get Adobe Flash player