Dat vind ik dus het grote nadeel van PHP, loose typing.quote: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.
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).quote:Op zaterdag 26 mei 2012 12:20 schreef Devv het volgende:
[..]
Dat vind ik dus het grote nadeel van PHP, loose typing.
Java is daar weer makkelijker in , php is daar loosse in. , misschien ook de reden dat ik somsquote: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).
1 2 3 4 5 | <?php $array = Array(); $string = (string) $waarde; $integer = (int) $integer; ?> |
Leg eens uit wat was je idee?quote:Op zaterdag 26 mei 2012 14:11 schreef Quir het volgende:
Iemand eerder meegemaakt dat fopen aangeroepen in een class destructor vervelend doet?
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:Op zaterdag 26 mei 2012 14:47 schreef Devv het volgende:
Misschien heb je hier iets aan: Bug #29167 fopen works differently in a constructor vs. a destructor.
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.quote:
1 2 3 4 5 6 | <?php if ($this->cacheUsage) { $this->writeToFile($this->cachePath . $this->cacheName . '.html', 'w', ob_get_contents()); ob_end_flush(); } ?> |
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; } ?> |
1 | Warning: fopen(Cache/pagina.html) [function.fopen]: failed to open stream: No such file or directory |
Waarom zou je dit willen? Had even wat posts doorgelezen, maar snap niet je opzet.quote: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
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 $players, Rules $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'); } } ?> |
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 )quote:
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.quote:Op zaterdag 26 mei 2012 15:11 schreef cablegunmaster het volgende:
Ik lees als je unset($Object); gebruikt de destructor wordt aangeroepen.
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!'; ?> |
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); } } ?> |
1 2 3 4 | <?php //bevat $controller = websitecontroller object $controller->listenerA($_GET['test']); ?> |
Ik zit nu na te denken hoe ik de $_POST , $_GET afhandeling moet uitvoeren.quote:
Ik krijg nu heel veel ingewikkelde code in google als ik dit zoek.quote: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.
het hoeft niet naar een andere pagina toe.quote:Request Dispatcher is used to forward a request to another page.
bron: http://www.hscripts.com/tutorials/jsp/examples/example2.php
Dit vind ik als ik op de request dispatcher zoek, beetje ingewikkeld.quote:
1 2 3 4 5 6 7 8 | <?php //kort zonder sanitize, voorbeeld. x20 if(isset($_POST['waarde'])) { $waarde = $_POST['waarde']; $controller->listenA($waarde); } ?> |
Ik ga dit eens proberen uit te vogelen .quote:
Globals en singelton heb ik altijd al erg onelegant gevonden.quote:
Zelf iets te maken ?quote: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?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |