abonnement Unibet Coolblue
pi_112047797
quote:
0s.gif Op zaterdag 26 mei 2012 11:55 schreef Light het volgende:

[..]

Het heeft als nadeel dat iedere method waar je "global $db;" gebruikt, potentieel je database instance kan veranderen door iets anders.
Dat vind ik dus het grote nadeel van PHP, loose typing.
pi_112047862
quote:
0s.gif Op zaterdag 26 mei 2012 12:20 schreef Devv het volgende:

[..]

Dat vind ik dus het grote nadeel van PHP, loose typing.
Da's een nadeel, ben ik met je eens. Maar 't is een eigenschap van de taal waar je dus gewoon mee moet werken (of je zoekt een andere taal op om mee te werken).
pi_112047963
quote:
0s.gif Op zaterdag 26 mei 2012 12:24 schreef Light het volgende:

[..]

Da's een nadeel, ben ik met je eens. Maar 't is een eigenschap van de taal waar je dus gewoon mee moet werken (of je zoekt een andere taal op om mee te werken).
Java is daar weer makkelijker in , php is daar loosse in. :P , misschien ook de reden dat ik soms
1
2
3
4
5
<?php
$array 
= Array();
$string = (string) $waarde;
$integer = (int) $integer;
?>
Tegen kom. om toch aan te geven wat bepaalde variabelen zijn.
Light veel van wat die spreker vertelt is eigenlijk best logisch. :P

[ Bericht 15% gewijzigd door cablegunmaster op 26-05-2012 12:45:57 ]
Redacted
pi_112050120
Iemand eerder meegemaakt dat fopen aangeroepen in een class destructor vervelend doet?
"Social order at the expense of liberty is hardly a bargain."
pi_112050799
quote:
9s.gif Op zaterdag 26 mei 2012 14:11 schreef Quir het volgende:
Iemand eerder meegemaakt dat fopen aangeroepen in een class destructor vervelend doet?
Leg eens uit wat was je idee?
Redacted
pi_112051268
quote:
Ik vroeg het inderdaad zonder toelichting omdat ik dacht dat het een bug zou zijn. Had die pagina ook al gevonden, maar die is uit 2004/2007, dus ik hoopte dat het inmiddels wel gefixt zou zijn. Nog steeds gissen of dat de dwarsligger is of niet.

quote:
0s.gif Op zaterdag 26 mei 2012 14:40 schreef cablegunmaster het volgende:

[..]

Leg eens uit wat was je idee?
Ik heb een cache functie die een kopie uit de cache doorsluist wanneer er een (niet-verlopen) beschikbaar is, zoniet, roept-ie ob_start() aan en set hij een variabele op True.
In de destructor heb ik dan

1
2
3
4
5
6
<?php
if ($this->cacheUsage) {
    
$this->writeToFile($this->cachePath $this->cacheName '.html''w'ob_get_contents());
    
ob_end_flush();
}
?>

die de volgende functie gebruikt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
public function writeToFile($path$mode$data) {
    
$success 'Error';
            
    if (
$file fopen($path$mode)) {
        if (
fwrite($file$data)) {
            
fclose($file);
            
$success 'Success!';
            goto 
End;
        }
                
        
fclose($file);
        
$success 'Failed to write';
        goto 
End;
    }
            
    
$success 'Failed to open file';
            
    
End:
    return 
$success;
}
?>

Wanneer ik het zo draai geeft hij de volgende melding

1Warning: fopen(Cache/pagina.html) [function.fopen]: failed to open stream: No such file or directory

Maar wanneer ik cachePath en cacheName public maak en de aanroep copy paste naar onder m'n template doet 'ie het zonder te morren.
"Social order at the expense of liberty is hardly a bargain."
pi_112051364
Ik wil het ook eens testen om te kijken of ik een test case kan maken met een simpele constructor en destructor :)
Redacted
pi_112051471
Ik moet nu weg, maar zal er straks een in elkaar knutselen.
"Social order at the expense of liberty is hardly a bargain."
pi_112051603
Ik lees als je unset($Object); gebruikt de destructor wordt aangeroepen.
andere optie: register_shutdown_function("Object");
Nog een idee fopen in de constructor aanroepen en vervolgens fclose(); gebruiken in de destructor.
of werkt fwrite niet in de destructor?

Bron:
http://stackoverflow.com/(...)er-shutdown-function

[ Bericht 9% gewijzigd door cablegunmaster op 26-05-2012 15:26:44 ]
Redacted
pi_112053153
quote:
0s.gif Op zaterdag 26 mei 2012 15:11 schreef cablegunmaster het volgende:
Ik lees als je unset($Object); gebruikt de destructor wordt aangeroepen.
andere optie: register_shutdown_function("Object");
Nog een idee fopen in de constructor aanroepen en vervolgens fclose(); gebruiken in de destructor.
of werkt fwrite niet in de destructor?

Bron:
http://stackoverflow.com/(...)er-shutdown-function
Waarom zou je dit willen? Had even wat posts doorgelezen, maar snap niet je opzet.

Als er bijv al een db class is aangeroepen kun je gewoon een nieuwe aanroepen. In php5 is het zo dat je dan al hem via referentie aanroept. Dus hetzelfde object. In een destructor __sleep() in dit geval, zet je bijv je afsluit acties neer. Globals zijn ook nergens voor nodig :) Je kan altijd nog een controller class maken waar je alles in beschikbaar maakt.

Voorbeeldje (oude code):
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
<?php

class Game {
    
    
// Holds player name
    
public $players = array();
    
    
// Game id database
    
public $game_id;
    
    
// Minimum start bid
    
public $minimum_bid 3;
    
    private 
$pdo;   
    
    private 
$rules;
    
    
// Holds turns
    
public $turns = array();
    
    public 
$bids = array();
    
    
// Sets game Id
    
public function __construct(Array $playersRules $rules) {
        
$this->players $players;  
        
$this->pdo = new Database();
        
$this->rules $rules;
    }                                
    
    
// Removes a player when he loses connection or leaves the game
    
public function removePlayer($player = array()) {
        if(
array_key_exists($player['name'], $this->players)) {
            unset(
$this->players[$player['name']]);
        }
    }
    
    public function 
nextTurn() {
        
$stop false;
        foreach(
$this->players as $player) {
            if(
$player == $this->player_turn)
                
$stop true;
            
            if(
$stop) {
                
$this->playerTurn $player;
                break;
            }
        }
    }
    
    public function 
setBid($name$bid) {
        
$this->bids[$name] = $bid;
    }
        
    public function 
__sleep() {
        
$this->pdo null;
        return array(
'players','game_id''bids''minimum_bid''turns''rules');
    }
}

?>


[ Bericht 77% gewijzigd door #ANONIEM op 26-05-2012 16:29:58 ]
  zaterdag 26 mei 2012 @ 16:24:32 #137
84244 Scorpie
Abject en infaam!
pi_112053481
MVC is taal onafhankelijk :')
Op dinsdag 13 augustus schreef Xa1pt:
Neuh, fraude mag best aangepakt worden. Maar dat het de maatschappij meer oplevert of beter is voor de samenleving, is nog maar de vraag.
Op donderdag 25 juni 2015 schreef KoosVogels:
Klopt. Ik ben een racist.
pi_112054127
quote:
0s.gif Op zaterdag 26 mei 2012 16:24 schreef Scorpie het volgende:
MVC is taal onafhankelijk :')
Ik ben bezig met een uitgebreide site om te bouwen daarom mijn terughoudenheid om alles goed te maken :). (beetje onderzoek wat wel en niet kan ) :P

[ Bericht 8% gewijzigd door cablegunmaster op 26-05-2012 18:07:46 ]
Redacted
pi_112055522
quote:
0s.gif Op zaterdag 26 mei 2012 15:11 schreef cablegunmaster het volgende:
Ik lees als je unset($Object); gebruikt de destructor wordt aangeroepen.
unset() zorgt er niet direct voor dat de destructor wordt aangeroepen. Dat gebeurt alleen als de garbage collector het object opruimt. En dat gebeurt alleen als geen referenties meer zijn naar het object, maar dan hoeft het nog niet meteen te gebeuren.
pi_112149414
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
<?php
    
class Cache {
        public 
$cacheUsage;

        function 
__construct() {
            
$this->cacheUsage False;
        }

        public function 
callCache($expiration) {
            if (
file_exists('Page.html') && (time()-filemtime('Page.html')) < $expiration) {
                include 
'Page.html';
                
$this->cacheUsage False;
                exit();
            } else {
                
ob_start();
                
$this->cacheUsage True;
            }
        }

        protected function 
writeToFile($path$mode$data) {
            
$file fopen($path$mode);
            
fwrite($file$data);
            
fclose($file);
        }

        function 
__destruct() {
            if (
$this->cacheUsage) {
                
$this->writeToFile('Page.html''w'ob_get_contents());
                
ob_end_flush();
            }
        }
    }

    
$CacheClass = new Cache();
    
$CacheClass->CallCache(30);

    echo 
'Hallo!';
?>

Even een vluchtige herproductie. Was het helaas alweer vergeten, heb namelijk de destructor er uit gekieperd omdat ik op sommige plekken in m'n script exit() aanroep waar ik niet wil dat de destructor meegepakt wordt.

En, een snelle test met bovenstand wijst uit dat met unset(object) de destructor wel degelijk aangeroepen wordt.
"Social order at the expense of liberty is hardly a bargain."
pi_112167365
Ik heb nog een vraag:
Als ik een Controller klasse maak.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class websiteController
{
    private 
$model;
    private 
$view;

    public function 
__construct($model,$view)
    {
        
$this->model $model;
        
$this->view $view;
    }
    public function 
listenerA($test){
        
$this->model->doeIets($test);
    }
}
?>

Hoe zorg ik ervoor dat hij luistert naar iets? Of moet ik in elke PHP de betreffende functies van de controller neerzetten?

1
2
3
4
<?php
//bevat $controller = websitecontroller object
$controller->listenerA($_GET['test']);
?>


[ Bericht 0% gewijzigd door cablegunmaster op 29-05-2012 14:45:35 ]
Redacted
  dinsdag 29 mei 2012 @ 14:30:48 #142
84244 Scorpie
Abject en infaam!
pi_112167533
Definieer 'luisteren'.
Op dinsdag 13 augustus schreef Xa1pt:
Neuh, fraude mag best aangepakt worden. Maar dat het de maatschappij meer oplevert of beter is voor de samenleving, is nog maar de vraag.
Op donderdag 25 juni 2015 schreef KoosVogels:
Klopt. Ik ben een racist.
pi_112168028
quote:
0s.gif Op dinsdag 29 mei 2012 14:30 schreef Scorpie het volgende:
Definieer 'luisteren'.
Ik zit nu na te denken hoe ik de $_POST , $_GET afhandeling moet uitvoeren.
Zal ik dan bij de controller klasse een lijst moeten maken van if $_POST en if $_GET?
Die vervolgens het Object Controller aanroept?
Redacted
  dinsdag 29 mei 2012 @ 14:48:56 #144
84244 Scorpie
Abject en infaam!
pi_112168186
Je wil dus $_GET en $_POST acties koppelen aan je controller? Kijk eens naar een RequestDispatcher routine.
Op dinsdag 13 augustus schreef Xa1pt:
Neuh, fraude mag best aangepakt worden. Maar dat het de maatschappij meer oplevert of beter is voor de samenleving, is nog maar de vraag.
Op donderdag 25 juni 2015 schreef KoosVogels:
Klopt. Ik ben een racist.
pi_112168347
quote:
0s.gif Op dinsdag 29 mei 2012 14:48 schreef Scorpie het volgende:
Je wil dus $_GET en $_POST acties koppelen aan je controller? Kijk eens naar een RequestDispatcher routine.
Ik krijg nu heel veel ingewikkelde code in google als ik dit zoek.
Wat ik eigenlijk wil is dat hij $_GET koppelt aan de controller.
of een $_POST verzoek.

quote:
Request Dispatcher is used to forward a request to another page.
bron: http://www.hscripts.com/tutorials/jsp/examples/example2.php
het hoeft niet naar een andere pagina toe.


quote:
Dit vind ik als ik op de request dispatcher zoek, beetje ingewikkeld. :P
Ondanks de hoeveelheid documentatie snap ik niet wat ze met de klasse willen doen.

Dit wil ik ongeveer bereiken dat de lijst met if($_POST) een stuk kleiner wordt. en afgehandeld wordt door de controller.
1
2
3
4
5
6
7
8
<?php
//kort zonder sanitize, voorbeeld.  x20
if(isset($_POST['waarde']))
{
      
$waarde $_POST['waarde'];
      
$controller->listenA($waarde);
}
?>
Of er een andere manier is om te controleren of een $_POST waarde of $_GET waarde is gezet en deze met de controller te kunnen afhandelen. :)

[ Bericht 15% gewijzigd door cablegunmaster op 29-05-2012 15:06:03 ]
Redacted
  dinsdag 29 mei 2012 @ 15:08:50 #146
84244 Scorpie
Abject en infaam!
pi_112168961
Een Request Dispatcher forward niet per se naar een pagina. Kan ook naar een Controller Actie.
Op dinsdag 13 augustus schreef Xa1pt:
Neuh, fraude mag best aangepakt worden. Maar dat het de maatschappij meer oplevert of beter is voor de samenleving, is nog maar de vraag.
Op donderdag 25 juni 2015 schreef KoosVogels:
Klopt. Ik ben een racist.
pi_112169936
quote:
Ik ga dit eens proberen uit te vogelen :).

Mijn eerste voorbeeld is gelukt met een simpele titel functie O+ .
Nu de rest nog :D . Maar ik heb hoop en denk dat het goed komt :s)

Pur class klinkt leuk maar hij gaat in de veronderstelling dat de Constructor niet bestaat / niet aangeroepen is. _O- Dus weer de prullenbak in / herschrijven :).

[ Bericht 27% gewijzigd door cablegunmaster op 29-05-2012 17:18:06 ]
Redacted
pi_112187275
quote:
Globals en singelton heb ik altijd al erg onelegant gevonden. :P
..///
pi_112192147
Waarom een controller class schrijven als er zoveel frameworks zijn die al een werkende, elegante en geteste implementatie hebben?
pi_112195714
quote:
0s.gif Op dinsdag 29 mei 2012 22:10 schreef Schepseltje het volgende:
Waarom een controller class schrijven als er zoveel frameworks zijn die al een werkende, elegante en geteste implementatie hebben?
Zelf iets te maken :) ?
Redacted
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')