scope of regex

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Wesley Overdijk

wesley Overdijk

28/01/2010 15:34:00
Quote Anchor link
Beste,

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)
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
<?
$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?
 
PHP hulp

PHP hulp

24/04/2024 10:53:21
 
Tim

Tim

28/01/2010 15:37:00
Quote Anchor link
Waarom niet gewoon:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$game
= new poker();
$hand = $game->getHand(3);
?>
 
Wesley Overdijk

wesley Overdijk

28/01/2010 15:39:00
Quote Anchor link
Omdat ik via de get ook andere dingen wil regelen. Zoals de flop, turn, river etc.
 
Martijn B

Martijn B

28/01/2010 16:03:00
Quote Anchor link
Dus je wil dit matchen 'woord[123]' ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$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
 
Wesley Overdijk

wesley Overdijk

28/01/2010 16:07:00
Quote Anchor link
Ik weet wel hoe een preg_match werkt ondertussen, maar toch nog niet zo heel goed... :P

En het gaat mij meer om gebruiks vriendelijkheid op de class.
 
Martijn B

Martijn B

28/01/2010 16:11:00
Quote Anchor link
ok, probeer ik het nog eens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$game
= new poker();
$hand = $game->setScope(3)->get('hand');
$game->unScope();
?>
 
Wesley Overdijk

wesley Overdijk

28/01/2010 16:13:00
Quote Anchor link
kan dat? o.0
 

28/01/2010 16:14:00
Quote Anchor link
Ja, dan moet je $this of whatever je wilt returnen. Een andere class kan dus ook.
 
Tim

Tim

28/01/2010 16:14:00
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$game
= new poker();

$flop = $game->getFlop();
$river = $game->getRiver();

$hand = $game->getHand(3);
?>
 
Thijs Damen

Thijs Damen

28/01/2010 16:16:00
Quote Anchor link
Wesley. dat is hetzelfde als:

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
<?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
Gewijzigd op 01/01/1970 01:00:00 door Thijs Damen
 
Wesley Overdijk

wesley Overdijk

28/01/2010 16:20:00
Quote Anchor link
en hoe ondersteun ik zoiets? :P
 
Martijn B

Martijn B

28/01/2010 16:21:00
Quote Anchor link
Je kunt hierover trouwens weinig info vinden op php.net.

Ik vond wel deze link: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
 
Wesley Overdijk

wesley Overdijk

28/01/2010 16:37:00
Quote Anchor link
thnx. Ik heb echter iemand die mij leert werken in oop. die zegt dan hoe hij het zou doen, wetende dat ik het ook zo ga doen om het goed te doen... Die zei tegen mij dat hij meerdere classes maakt, voor elk object. Dus een class deck, een class player, een class dealer...

Dus ik ga maar weer opnieuw beginnen :P
 
Thijs Damen

Thijs Damen

28/01/2010 16:41:00
Quote Anchor link
Wesley, dat klopt wel. Ik zou iedere kaard zelfs een klasse geven.

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.
 
Wesley Overdijk

wesley Overdijk

28/01/2010 16:46:00
Quote Anchor link
nou als ik het goed snap, ga ik dit hebben:

class poker *de main class*
class deck
class player
class dealer


al denk ik dat class player en poker wel in 1 kunnen.
 
Wesley Overdijk

wesley Overdijk

28/01/2010 16:53:00
Quote Anchor link
geen bump want ik sta nog bovenaan.

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?
 
Thijs Damen

Thijs Damen

28/01/2010 17:03:00
Quote Anchor link
Bij het Extenden van een klas neem je de funtionaliteit van de geextende klass over.

Klein voorbeeldje:

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
<?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();
?>


(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.
 
Wesley Overdijk

wesley Overdijk

28/01/2010 17:05:00
Quote Anchor link
dus... wat is beter? extends, of require_once en aaroepen? en als extends beter is, hoe doe ik dit dan met meerdere classes
 
Thijs Damen

Thijs Damen

28/01/2010 17:13:00
Quote Anchor link
Nee je begrijpt het nog niet.

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)
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
<?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]
?>


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
 
Wesley Overdijk

wesley Overdijk

28/01/2010 17:17:00
Quote Anchor link
hahahahahaahahaha geniale uitleg xD

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?
 
Thijs Damen

Thijs Damen

28/01/2010 17:26:00
Quote Anchor link
Je hebt het weer Mis. Een Speler is toch geen Poker?

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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.