scope of regex
Ik ben dus nog altijd bezig met mijn OOP logica. Ik heb weer een nieuw vraagstuk.
Ik ben dus bezig met een poker class.. Nu wil ik dat de gebruiker van de class, een aparte speler zijn hand kan opvragen.
Nu heb ik 2 manieren bedacht om dit te doen.
de eerste, is met een 'scope'
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$game = new poker();
//Setscope(speler), hiermee zet ik een bepaalde speler in de spotlights in mijn class.
$game->setScope(3);
//Hiermee pak ik de speler in de scope, zijn hand.
$hand = $game->get('hand');
$game->unScope();
[/code]
Dit leek mij de beste manier. En ook het netste. Maar nu, kan het ook anders, weer korter in gebruik, maar meer class code.
[code]
[code]<?
$game = new poker();
$hand = $game->get('hand[3]');
[/code]
hiermee moet ik dan weer een regex gaan gebruiken.
Welke methode, of misschien een andere manier, is het beste?
$game = new poker();
//Setscope(speler), hiermee zet ik een bepaalde speler in de spotlights in mijn class.
$game->setScope(3);
//Hiermee pak ik de speler in de scope, zijn hand.
$hand = $game->get('hand');
$game->unScope();
[/code]
Dit leek mij de beste manier. En ook het netste. Maar nu, kan het ook anders, weer korter in gebruik, maar meer class code.
[code]
[code]<?
$game = new poker();
$hand = $game->get('hand[3]');
[/code]
hiermee moet ik dan weer een regex gaan gebruiken.
Welke methode, of misschien een andere manier, is het beste?
Omdat ik via de get ook andere dingen wil regelen. Zoals de flop, turn, river etc.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sString = 'woord[123]';
if( preg_match('/^([a-z_]+)\[(\d+)]$/Di', $sString, $aMatch) )
{
print_r($aMatch);
}
?>
$sString = 'woord[123]';
if( preg_match('/^([a-z_]+)\[(\d+)]$/Di', $sString, $aMatch) )
{
print_r($aMatch);
}
?>
Als je puur voor snelheid gaat en ook dingen als 'woord[[123]' accepteert dan zou ik strpos() (of strrpos()) en substr() gebruiken.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
En het gaat mij meer om gebruiks vriendelijkheid op de class.
kan dat? o.0
Ja, dan moet je $this of whatever je wilt returnen. Een andere class kan dus ook.
wesley schreef op 28.01.2010 15:39:
Omdat ik via de get ook andere dingen wil regelen. Zoals de flop, turn, river etc.
Dan doe je toch:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$game = new Poker();
$scope = $game->setScope(3);
$hand = $scope->get('hand');
[/code]
Je verwijst in principe alleen maar door.
Kan je bijvoorbeeld uit de hand ook nog een kaart pakken, en daarvan een kleur kun je gewoon door gaan:
[code]
[code]<?php
$game = new Poker();
$color = $game->setScope(3)->get('hand')->getCard(1)->getColor();
[/code]
Zolang de plek waar je bent (setScope(3)) maar weer de functie get('hand') enz. ondersteund
edit: te veel met winkelwagens bezig blijkbaar. overigens wat Karl zegt is waarheid
$game = new Poker();
$scope = $game->setScope(3);
$hand = $scope->get('hand');
[/code]
Je verwijst in principe alleen maar door.
Kan je bijvoorbeeld uit de hand ook nog een kaart pakken, en daarvan een kleur kun je gewoon door gaan:
[code]
[code]<?php
$game = new Poker();
$color = $game->setScope(3)->get('hand')->getCard(1)->getColor();
[/code]
Zolang de plek waar je bent (setScope(3)) maar weer de functie get('hand') enz. ondersteund
edit: te veel met winkelwagens bezig blijkbaar. overigens wat Karl zegt is waarheid
Gewijzigd op 01/01/1970 01:00:00 door Thijs Damen
en hoe ondersteun ik zoiets? :P
Ik vond wel deze link: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
Dus ik ga maar weer opnieuw beginnen :P
Maar er moet toch een class 'game' worden.
(moet.. nee. maar dat zou ik wel doen).
Die het spelletje bijhoud.
Die de class 'Deck' aangeeft waaneer te delen, te floppen e.d.
Die de spelers aangeeft wanneer ze aan de beurt zijn.
Die het scorebord verteld wat die op moet tellen.
Die die... alles regelt zeg maar.
en als joun $game->getFlop(); tegen Class Deck zegt ->doFlop();. Is daar niks mis mee.
class poker *de main class*
class deck
class player
class dealer
al denk ik dat class player en poker wel in 1 kunnen.
Als ik het goed lees op die link trouwens, in de comments, staat iets over extends.
Dus in plaats van require_once() en dan $var = new externalClass() doe ik dan extends? is dat netter/handiger/heeft het voordelen?
Klein voorbeeldje:
Code (php)
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
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
<?php
Class Persoon {
protected $geslacht;
protected function setGeslacht($geslacht) {
$this->geslacht = $geslacht;
}
}
class Man extends Persoon {
public function __construct() {
$this->setGeslacht('mannelijk');
}
public function getGeslacht() {
return $this->geslacht;
}
}
$man = new Man;
echo $man . ' is ' . $man->getGeslacht();
?>
Class Persoon {
protected $geslacht;
protected function setGeslacht($geslacht) {
$this->geslacht = $geslacht;
}
}
class Man extends Persoon {
public function __construct() {
$this->setGeslacht('mannelijk');
}
public function getGeslacht() {
return $this->geslacht;
}
}
$man = new Man;
echo $man . ' is ' . $man->getGeslacht();
?>
(miss een verkeerd voorbeeldje achja)
Wat er gebeurd:
Ik maak een object "Man". Man Extend class Persoon. Want Man is een Persoon, en erft alle variable en methoden (functies) van Man.
Ik kan dus in Man de functie "setGeslacht()" van Persoon aanroepen en de variable geslacht ophalen.
dus... wat is beter? extends, of require_once en aaroepen? en als extends beter is, hoe doe ik dit dan met meerdere classes
Je hebt de klasse Persoon.
Karel is een Persoon.
Karel Extend dus Persoon en kan de functionaliteit van een Persoon (Lopen, Eten Drinken). Maar ook zijn eigen functionaliteit (Karel is bodybuilder en kan dus Trainen).
Lisa is ook een Persoon. Lisa kan dus ook Lopen Eten en Drinken, Maar niet trainen. Lisa is een mietje. Zij doet breien.
Code (php)
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
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
<?php
Class Persoon {
protected $naam;
public function Loop() {
echo $this->naam . ' Loopt <br />';
}
public function Eet() {
echo $this->naam . ' Eet <br />';
}
public function Drink() {
echo $this->naam . ' Drinkt <br />';
}
protected function setNaam($naam) {
$this->naam = $naam;
}
}
class Karel extends Persoon{
public function __construct() {
$this->setNaam('Karel');
}
public function Train() {
echo $this->naam . ' traint <br />';
}
}
class Lisa extends Persoon{
public function __construct() {
$this->setNaam('Lisa');
}
public function Brei() {
echo $this->naam . ' breit <Br />';
}
}
$karel = new Karel();
$karel->Loop();
$karel->Train();
$lisa = new Lisa();
$lisa->drink();
$lisa->brei();
[/code]
?>
Class Persoon {
protected $naam;
public function Loop() {
echo $this->naam . ' Loopt <br />';
}
public function Eet() {
echo $this->naam . ' Eet <br />';
}
public function Drink() {
echo $this->naam . ' Drinkt <br />';
}
protected function setNaam($naam) {
$this->naam = $naam;
}
}
class Karel extends Persoon{
public function __construct() {
$this->setNaam('Karel');
}
public function Train() {
echo $this->naam . ' traint <br />';
}
}
class Lisa extends Persoon{
public function __construct() {
$this->setNaam('Lisa');
}
public function Brei() {
echo $this->naam . ' breit <Br />';
}
}
$karel = new Karel();
$karel->Loop();
$karel->Train();
$lisa = new Lisa();
$lisa->drink();
$lisa->brei();
[/code]
?>
Een Kever is geen Persoon. Een kever is een insect. Een kever zal dus ook niet Persoon extenden.
Daarnaast.
Je hebt de bestanden ZOWIEZO nodig om de klasse aan te roepen. Je maakt alleen niet de persoon klasse aan (dit doen karel en lisa al)
Edit:
Voor je poker klasse heb je uit mijn hoofd makkelijk de volgende klasse (die alleen betrekking hebben op de poker spel)
Poker (1x), Speler (2 of meer), Deck 1x, Kaart (1 hand bestaat uit 2x Kaart. de flop bestaat uit 3x een kaart. Een spel met 4 spelers word dus al 16 keer de klasse Kaart aangemaakt. Iedere kaart is namenlijk een object).
Zo zie je meteen dat een klasse dus meerdere keren gebruikt kan (en moet in OOP) worden. Iedere kaart heeft zijn eigen propertys (Kleur, Waarde(2->aas). Klasse Deck houdt bij welke kaarten zijn gebruikt, zodat een kaart niet meer dan eens gebruikt zal worden. Ook zal hij de kaarten delen (Deck->DeelKaart() Pakt een unieke kaart en deelt deze).
Alle instructies gaat via Poker. Poker zegt tegen Deck dat hij moet delen, hoevaak, aan wie, wanneer en wat. Kaart houdt alleen zijn eigen gegevens bij. Een aparte klasse zal moeten kijken of er met een X aantal kaarten een combinatie is gemaakt. Vooralsnog zie ik nog geen extend gebeuren in je klasse (maar dit is een heel snel bedacht systeempie)
Gewijzigd op 01/01/1970 01:00:00 door Thijs Damen
dus. als ik het wel snap...
class poker.
ik include class deck, class deck extends class poker. want in poker heb ik een deck. class player extends class poker, want in poker heb je ook spelers.
of denk ik weer mis?
Klaas is een Speler. en Texas-Holdem is Poker.
Klaas extend dus Speler. en Texas-Holden extends Poker (in het geval dat je meerdere spel variaties wilt gaan aanbieden)
Mocht je hier echt in geinteresseerd zijn ga een cursus volgen of een boek lezen.
Ik heb een cursus gedaan en had een leraar die alles ongelooflijk duidelijk bewoorden, uitlegde en ons liet nadenken. Hier heb ik 99% van mijn kennis opgedaan, en dat in 2 weken tijd.
Echt OOP programmeren doe ik ook niet, dat kan ik ook nog niet. Ik ken de basis. de daadwerkelijke uitwerking hiervan moet ook bij mij nog komen.