| 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 | <?php Class Product { Global $db; function __construct() { setProductInfo($_GET['id']); } /** * Idee hiervan is dat hij de product info opslaat , * het ID en als er geen ID is van het product dat hij zichzelf vernietigd. */ function setProductInfo($id){ $this->product_info = $db->fetchAssoc($db->query("Select * from products_ where id = ' ".$id." ' ")); if(!empty($this->product_info['id'])){ return true; }else{ destroy(); } function destroy(){ unset($this); return true; } } ?> |
| 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 | <?php namespace DatabaseEntitiesKeuken; class Product { //inhoud function getName() { return "Test1"; } }; namespace DatabaseEntitiesStofruimte; class Product { // inhoud function getName() { return "Test2"; } }; use DatabaseEntitiesKeukenProduct; $product = new Product(); echo $product->getName(); use DatabaseEntitiesStofruimteProduct; $product_stof = new Product(); echo $product_stof->getName(); ?> |
Ja ik heb ook meerdere drupal sites gemaakt, en inderdaad je kunt het zo aanpassen als je wilt, net als elk opensource pakket, maar het is absoluut niet ideaal. De code is niet OOP en erg rommelig en inefficient (maar daarmee wel weer flexibel).quote:Op vrijdag 25 mei 2012 17:04 schreef Pizzalucht het volgende:
[..]
Dat ligt meer aan ervaring. Met Drupal kan je eigenlijk alles aanpassen, als je weet hoe.
De documentatie van Drupal is over het algemeen ook erg goed.
Maar als je niet verder komt dan een module installeren, aanzetten en er dan achterkomen dat het niet precies is wat je zoekt, en dan stopt met proberen, dan is Drupal inderdaad niks voor je.
Ik werk ook bij een bedrijf waar we bijna alleen maar Drupal doen, en het is veel meer dan alleen "een kleine hack/aanpassing".
Nee, waarom zou je dat willen?quote:Op vrijdag 25 mei 2012 18:55 schreef cablegunmaster het volgende:
Ik vraag me af , ik zit nu heel erg in OO Php te verdiepen en nu is mij de vraag hoe ik het volgende idee moet uitvoeren, ik zit nu met een idee om al mijn Producten in klasses te maken zodat het makkelijker is om het uit te voeren / aan te passen.
Kan een Object zichzelf vernietigen? ,
Dat zou kunnen maar het is niet hoe het hoort, een class moet zo zelfstandig mogelijk zijn. Je kunt OF de databasegegevens in de class zelf definieren (als je het alleen daar nodig hebt) OF je kunt de gegevens opgeven bij het oproepen van de class.quote:tweede vraag als ik een klasse heb genaamd $db en die wil ik overal gebruiken is Global $db; voldoende? of kan ik in de $db klasse iets doen zodat ik het niet perse in elke functie opnieuw hoef te definiėren.
Nieuwschierigheidquote:Op vrijdag 25 mei 2012 20:26 schreef Schepseltje het volgende:
Nee, waarom zou je dat willen?
Dat zou kunnen maar het is niet hoe het hoort, een class moet zo zelfstandig mogelijk zijn. Je kunt OF de databasegegevens in de class zelf definieren (als je het alleen daar nodig hebt) OF je kunt de gegevens opgeven bij het oproepen van de class.
Ik denk dat je het beste met een framework kan beginnen, dan wordt je gedwongen om op de juiste manier te werken en snap je het OOP concept veel sneller.
Hoe echo je het? Want je kan de tijd instellen die op het huidige moment staat ingesteld.quote:Op vrijdag 25 mei 2012 21:58 schreef boem-dikkie het volgende:
Tof Sitethief, ook even kijken.
Kan het trouwens aan een PHP server liggen hoe strtotime reageert? Als ik een strtotime functie gebruik als ik lokaal werk doet hij precies wat ik wil, namelijk gewoon de datum 25-05-2012 naar een unix timestamp converteren, als ik datzelfde doe op mijn webserver maakt hij er opeens 02-11-2030 van.
Ik gooi de userinput met de strtotime functie in de database.quote:Op vrijdag 25 mei 2012 22:02 schreef cablegunmaster het volgende:
[..]
Hoe echo je het? Want je kan de tijd instellen die op het huidige moment staat ingesteld.
Probeer eens op beide server een simpele echo date uit te voeren en kijk of dat misgaat. of klopt.
Vervolgens weet je hierdoor op welke tijd Je server staat. Of dit aan te passen is mogelijk. Maar ik weet niet zo snel waar.
Kijk anders even hiernaar: [SOLVED] Php date function wrong time
Weet ik , tis een examplequote:
Ik snap OO programeren In Java beter dan in Phpquote:Op zaterdag 26 mei 2012 10:56 schreef boem-dikkie het volgende:
Ben je al zo ver dat je MVC begrijpt? Anders raad ik de tutorial van Zend Framework aan, ook al ga je daar niks mee doen het is wel een goede manier om te begrijpen hoe een MVC model en OOP werkt in een 'echte' applicatie in plaats van een auto die rood is en kan rijden.
Probeer alleen maar te helpen hoor.quote:Op zaterdag 26 mei 2012 11:09 schreef cablegunmaster het volgende:
[..]
Ik snap OO programeren In Java beter dan in Phpdaar heb ik al een MVC model gebouwd. Hierbij zit ik nog te kijken of ik in Phpstorm* een eigen MVC kan opzetten. Zit niet zo denigrerend te doen
![]()
![]()
Ik dank je voor je hulp, als je vragen hebt stel ze.quote:Op zaterdag 26 mei 2012 11:20 schreef boem-dikkie het volgende:
[..]
Probeer alleen maar te helpen hoor.
Ik zit niet zo in de PHP, maar vanuit een algemeen genomen perspectief kan ik zeggen dat er niets mis is met globale variabelen. Mits je het singleton principe in stand houdt. Dus alleen globaal declareren als je zeker weet dat er altijd maar één instantie zal zijn.quote:Op zaterdag 26 mei 2012 11:09 schreef cablegunmaster het volgende:
[..]
...of onhandig waren) Vanuit de gebruikers opinie. Weet nu niet of hier een waarheid in zit?
Daar zat ik eerder naar te kijken.![]()
Duidelijk dat is ook het geval!quote:Op zaterdag 26 mei 2012 11:42 schreef Devv het volgende:
[..]
Ik zit niet zo in de PHP, maar vanuit een algemeen genomen perspectief kan ik zeggen dat er niets mis is met globale variabelen. Mits je het singleton principe in stand houdt. Dus alleen globaal declareren als je zeker weet dat er altijd maar één instantie zal zijn.
Wat is er anders aan MVC in Java dan in PHP?quote:Op zaterdag 26 mei 2012 11:09 schreef cablegunmaster het volgende:
[..]
Ik snap OO programeren In Java beter dan in Phpdaar heb ik al een MVC model gebouwd. Hierbij zit ik nog te kijken of ik in Phpstorm* een eigen MVC kan opzetten. Zit niet zo denigrerend te doen
![]()
![]()
Het heeft als nadeel dat iedere method waar je "global $db;" gebruikt, potentieel je database instance kan veranderen door iets anders. Dan krijg je fouten die heel lastig te vinden zijn. Als je in je model een setter hebt voor de database, kun je daar valideren dat je echt een database object krijgt. En daarna heb je een reference naar het object, daar kan de rest van de wereld niet bij.quote:Vragen die ik had waren:
1. Ik heb een DB klasse moet ik daarvoor bij elke classe , functie perse Global $db neerzetten? of is GLOBALS['db'] Daarvoor een betere oplossing? (Ik lees overal dat Globals "onveilig" of onhandig waren) Vanuit de gebruikers opinie. Weet nu niet of hier een waarheid in zit?
Smarty (of een ander templating systeem) hoort in de view.quote:2. Als ik eenmaal bezig ben zat ik mijn structuur uit te denken, om een goede basis te creėren. met $_POST en afhandeling van $_GET. (filestructuur).
3. Hoe verwerk ik Smarty. (vermoedelijk met behulp van de View)
1. geen idee , gewoon nog niet mee gewerkt.quote:Op zaterdag 26 mei 2012 11:55 schreef Light het volgende:
Wat is er anders aan MVC in Java dan in PHP?
[..]
Het heeft als nadeel dat iedere method waar je "global $db;" gebruikt, potentieel je database instance kan veranderen door iets anders. Dan krijg je fouten die heel lastig te vinden zijn. Als je in je model een setter hebt voor de database, kun je daar valideren dat je echt een database object krijgt. En daarna heb je een reference naar het object, daar kan de rest van de wereld niet bij.
[..]
Smarty (of een ander templating systeem) hoort in de view.
Ik heb mezelf schromelijk overschat.quote:Op zaterdag 26 mei 2012 10:56 schreef boem-dikkie het volgende:
Ben je al zo ver dat je MVC begrijpt?
De structuren zijn gewoon hetzelfdequote:Op zaterdag 26 mei 2012 12:08 schreef cablegunmaster het volgende:
[..]
1. geen idee , gewoon nog niet mee gewerkt.
quote:2. Dus eigenlijk in de controller Pseudo: Setdb($db) functie. if(get_class($db) == "db"); true false.
en dan het toepassen. met Getdb(); in elke klasse?
| 1 2 3 4 5 6 7 8 9 | <?php private $db; public function setDb(MyDatabaseClass $db) { $this->db = $db; } public function getDb() { return $this->db; } ?> |
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.quote: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 makenquote:
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 vogelenquote:
Globals en singelton heb ik altijd al erg onelegant gevonden.quote:
Zelf iets te makenquote: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: | |