quote:Op vrijdag 19 september 2014 21:09 schreef wipes66 het volgende:
http://www.reddit.com/r/P(...)ed_in_php_code_so_i/
1 2 3 4 5 6 7 | class voorbeeld { public function lala(){ echo "Hoi" } } voorbeeld::lala(); |
1 2 3 4 5 6 7 | class voorbeeld { static function lala(){ echo "Hoi" } } $voorbeeld = new voorbeeld; $voorbeeld->lala(); |
Een static-methode is handig als de methode niet iets met de klasse zelf hoeft te doen.quote:Op zaterdag 20 september 2014 23:25 schreef Robuustheid het volgende:
Wat is het nut ervan om iets static te definieren?
Als ik het doe:
[ code verwijderd ]
Waar is die static bij function dan voor nodig
En op een andere manier:
[ code verwijderd ]
Wat voor zin heeft static dan nog?
Het eerste geeft een strict warning in PHP. In de meeste OO talen kan het niet eens.quote:Op zaterdag 20 september 2014 23:25 schreef Robuustheid het volgende:
Wat is het nut ervan om iets static te definieren?
Als ik het doe:
[ code verwijderd ]
Waar is die static bij function dan voor nodig
En op een andere manier:
[ code verwijderd ]
Wat voor zin heeft static dan nog?
Hoe bedoel je? Met andere manieren ben ik niet mee bekend.quote:Op zondag 21 september 2014 00:15 schreef robin007bond het volgende:
Overigens is het discutabel of je classes met enkel static methodes wel in een klasse moet stoppen of gewoon in een namespace.
Maar ja, geen OOP.
Gewoon procedureel.quote:Op zondag 21 september 2014 00:24 schreef Robuustheid het volgende:
[..]
Hoe bedoel je? Met andere manieren ben ik niet mee bekend.
Waarom zou je het dan uberhaupt OO maken?quote:Op zondag 21 september 2014 00:08 schreef robin007bond het volgende:
[..]
Een static-methode is handig als de methode niet iets met de klasse zelf hoeft te doen.
Stel dat je bijvoorbeeld een Math-klasse hebt. Is het niet een beetje vreemd om een object Math te hebben om dan pas methodes te kunnen gebruiken voor abs etc.? Dan kun je beter al die Math-methodes static maken.
Even mezelf quoten:quote:Op zondag 21 september 2014 10:07 schreef slacker_nl het volgende:
[..]
Waarom zou je het dan uberhaupt OO maken?
Wellicht dat consistentie een reden is.quote:Op zondag 21 september 2014 00:15 schreef robin007bond het volgende:
Overigens is het discutabel of je classes met enkel static methodes wel in een klasse moet stoppen of gewoon in een namespace.
Maar ja, geen OOP.
Probeer het hier maar: http://sandbox.onlinephpfunctions.com/quote:Op zondag 21 september 2014 10:43 schreef Robuustheid het volgende:
Bedankt voor jullie bijdragen. Het is dus geen valide code, maar wordt desondanks wel uitgevoerd.
Als ik error_reporting(E_ALL | E_STRICT); doe, verschijnt er nog steeds geen waarschuwing als ik bovenstaand code uitvoer?
1 2 3 4 5 6 7 8 9 10 11 | <?php error_reporting(E_ALL | E_STRICT); class voorbeeld { public function lala() { echo "Hoi"; } } voorbeeld::lala(); ?> |
1 2 3 4 5 6 7 8 9 10 11 | <?php class voorbeeld { private $a = 3; public function lala($b) { echo $this->a*$b; } } voorbeeld::lala(3); ?> |
Dat is allemaal erg marginaal. Natuurlijk, als je elke keer instances moet gaan maken in je code om een of andere utility method aan te roepen, dan is dat niet heel efficiënt, maar dat zijn niet de zaken die doorgaans geheugenproblemen veroorzaken.quote:Op zondag 21 september 2014 11:19 schreef raptorix het volgende:
Static heeft volgens mij ook compile en geheugen technisch voordelen, ik vermoed dat als je iets static definieert deze nooit 2 keer in geheugen zal komen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $mm_type="application/octet-stream"; header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Type: " . $mm_type); header("Content-Length: " .(string)(filesize($path)) ); header('Content-Disposition: attachment; filename="'.basename($path).'"'); header("Content-Transfer-Encoding: binary\n"); readfile($path); // outputs the content of the file exit(); ?> |
Ok manquote:Op maandag 22 september 2014 13:09 schreef xaban06 het volgende:
Ik heb een soort van download server gemaakt. PHP script serveert de bestanden. Bestanden zijn tussen de 2GB en 5GB.
Echter stopt de download automatisch na een paar seconde.
[ code verwijderd ]
Je kunt readfile beter niet voor dit soort situaties gebruiken. De gehele file wordt namelijk ingeladen en daarna pas verzonden. Je zult waarschijnlijk al eerder een ‘out of memory’ krijgen.quote:Op maandag 22 september 2014 13:09 schreef xaban06 het volgende:
Ik heb een soort van download server gemaakt. PHP script serveert de bestanden. Bestanden zijn tussen de 2GB en 5GB.
Echter stopt de download automatisch na een paar seconde.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $file = fopen( "my-file.raw", "rb" ); while ( !feof($file) ) { $chunk = fread( $file, 1024*16 ); echo $chunk; ob_flush(); flush(); } fclose( $file ); ?> |
http://php.net/manual/en/function.readfile.phpquote:Op maandag 22 september 2014 14:52 schreef Aether het volgende:
[..]
Je kunt readfile beter niet voor dit soort situaties gebruiken. De gehele file wordt namelijk ingeladen en daarna pas verzonden. Je zult waarschijnlijk al eerder een ‘out of memory’ krijgen.
Een betere oplossing is om het bestand in kleinere blokken te lezen en deze te verzenden: (niet getest)
[ code verwijderd ]
Dit is denk ik een betere optie:quote:readfile() will not present any memory issues, even when sending large files, on its own. If you encounter an out of memory error ensure that output buffering is off with ob_get_level().
quote:Op maandag 22 september 2014 19:44 schreef slacker_nl het volgende:
[..]
http://php.net/manual/en/function.readfile.php
[..]
Dit is denk ik een betere optie:
http://stackoverflow.com/(...)rve-a-file-using-php
True, maar het is meestal ook best practice qua onderhoudbaarheid, met name voor collega developers die niet altijd even bekend zijn met een code base.quote:Op zondag 21 september 2014 12:37 schreef Monolith het volgende:
[..]
Dat is allemaal erg marginaal. Natuurlijk, als je elke keer instances moet gaan maken in je code om een of andere utility method aan te roepen, dan is dat niet heel efficiënt, maar dat zijn niet de zaken die doorgaans geheugenproblemen veroorzaken.
Juist om wat ik al eerder aangaf. Als je static calls gaat doen naar non-static methods dan 'mag' dat in PHP. Bizarre implementatiebeslissing, maar daar staan de PHP devs wel bekend om.quote:Op dinsdag 23 september 2014 09:53 schreef raptorix het volgende:
[..]
True, maar het is meestal ook best practice qua onderhoudbaarheid, met name voor collega developers die niet altijd even bekend zijn met een code base.
Die warnings stuurt PHP niet voor niks, he.quote:Op dinsdag 23 september 2014 10:00 schreef Monolith het volgende:
[..]
Juist om wat ik al eerder aangaf. Als je static calls gaat doen naar non-static methods dan 'mag' dat in PHP.
Dat weet ik, maar het zou überhaupt niet toegestaan mogen zijn. Het zou moeten resulteren in een fatal error.quote:Op dinsdag 23 september 2014 11:10 schreef Tijn het volgende:
[..]
Die warnings stuurt PHP niet voor niks, he.
Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instortenquote:Op dinsdag 23 september 2014 11:54 schreef Monolith het volgende:
[..]
Dat weet ik, maar het zou überhaupt niet toegestaan mogen zijn. Het zou moeten resulteren in een fatal error.
Pech. Dat is meer werk voor ons.quote:Op dinsdag 23 september 2014 12:00 schreef Tijn het volgende:
[..]
Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instorten
Ja ik weet dat backwards compatibility de reden is, maar je moet ook ergens een keer een streep trekken. Het probleem is natuurlijk dat ze het OO aspect van de taal later hebben geïntroduceerd en pas redelijk volledig vanaf PHP 5. PHP 4 is weliswaar 'OO', maar miste nog basale zaken als access modifiers.quote:Op dinsdag 23 september 2014 12:00 schreef Tijn het volgende:
[..]
Mja, het probleem is dan (zoals zo vaak met PHP) dat een hoop oude applicaties instorten
Wat dat betreft was PHP Reboot wel een aardig initiatief. Jammer dat het nooit is doorgezet.quote:Op dinsdag 23 september 2014 13:28 schreef KomtTijd... het volgende:
Het zou wat mij betreft helemaal niet gek zijn als ze eens flink gaan snijden/refactoren in de functienamen. Alles wat je weg wilt gooien gewoon per direct deprecaten en over 1 of 2 versies weggooien. Eventueel de laatste versie vóór de grote schoonmaak LTS maken voor de compatibility.
Op zo'n manier? http://doctrine-orm.readt(...)iltering-collectionsquote:Op woensdag 24 september 2014 14:43 schreef KomtTijd... het volgende:
Symfony2'ers:
Ik heb een entity ("Ticket") met een one-to-many relation naar de entity Comment. Kortom een ticket kan meerdere comments hebben. Als ik een ticket opvraag worden de comments hierbij weergegeven.
Een comment kan 'deleted' zijn, dan wil ik deze niet meer weergeven bij de ticket waar hij aan gekoppeld is. Ik wil 'm echter ook niet removen voor het geval hij weer teruggeplaatst wordt.
Hoe krijg ik dat voor elkaar? Ik had mijn hoop gevestigd op het toevoegen van doctrine criteria aan de getComments() functie van de Ticket entity, maar dat helpt niet.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php #Ticket entity public function getComments() { $criteria = Criteria::create() ->where(Criteria::expr()->eq("deleted", false)); return $this->comments->matching($criteria); } public function getAllComments() { return $this->comments; } ?> |
1 2 3 4 5 | <?php $ticket = $this->getDoctrine() ->getRepository('TicketBundle:Ticket') ->find($id); ?> |
Ik ken Symphony en Doctrine niet genoeg om je daar antwoord op te kunnen geven, maar dit soort dingen kun je vaak het best even debuggen middels een fatsoenlijke IDE en in het geval van PHP iets van Xdebug ofzo.quote:Op woensdag 24 september 2014 15:03 schreef KomtTijd... het volgende:
Had gehoopt zoiets te kunnen doen ja
[ code verwijderd ]
maar als ik in de controller de ticket aanroep, wordt die getComments functie helemaal niet aangeroepen.
[ code verwijderd ]
Vage shit.quote:Op woensdag 24 september 2014 15:48 schreef KomtTijd... het volgende:
Krijg nou tieten, als je HTML aanroept ipv JSON werkt die criteria wel. Af en toe word ik moe van die FOSRestBundle.
1 2 3 4 5 | <?php {% for comment in ticket.comments %} // dingen {% endfor %} ?> |
Dan zou ik gewoon zelf een foreach in getComments doen. Is waarschijnlijk nog sneller dan die Criteria.quote:Op donderdag 25 september 2014 00:09 schreef KomtTijd... het volgende:
Ja de HTML gaat via een twig template. Maar dat boeit me niet, 't gaat om de JSON. En ja, krijg wel comments terug in de JSON maar gewoon allemaal dus.
Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?quote:Op donderdag 25 september 2014 00:09 schreef KomtTijd... het volgende:
Ja de HTML gaat via een twig template. Maar dat boeit me niet, 't gaat om de JSON. En ja, krijg wel comments terug in de JSON maar gewoon allemaal dus.
Dan zou je kunnen proberen om $comments protected of private te maken, wellicht dat er dan wordt gekeken naar een getter.quote:Op donderdag 25 september 2014 00:19 schreef Monolith het volgende:
[..]
Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?
1 2 3 4 5 6 7 8 | <?php /** * @ORM\OneToMany(targetEntity="Comment", mappedBy="ticket", cascade={"persist"}) * @serializer\Groups({"ticketDetails"}) * @serializer\Accessor(getter="getComments") <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */ protected $comments; ?> |
Haha, ik wilde nog zeggen, als ze JMS gebruiken, kijk dan even in de docs bij annotations.quote:Op donderdag 25 september 2014 00:25 schreef KomtTijd... het volgende:
Good thinking. $comments is al protected en had ik ook al private gemaakt bij wijze van test, haalde niets uit.
Maar ik denk wel dat ik het in deze hoek moet zoeken. De JSON wordt geproduceerd door de JSMSerializer bundle en die kun je weer beinvloeden door annotations bij, jawel, de variables zelf. Niet de getter/setter functies.
morgen maar eens naar kijken ofzo. Ik lijk wel gek, hier om half 1 's nachts nog over nadenken
Dat bedoel ik ook met een debugger. Daarmee loop je stap voor stap door je code.quote:Op donderdag 25 september 2014 00:32 schreef KomtTijd... het volgende:
It's not a bug, it's a feature, mate!
De profiler laat (liet) me keurig zien dat de uitgevoerde queries verschillend zijn, maar waaróm dan, dat mag je meestal zelf uitvinden.
Twig kijkt eerst of het een public property is, dan of het een public method is, daarna of er een public method get... is, vervolgens of er een public method is... bestaat en tenslotte of er een public method has... bestaat. De eerste die werkt, wordt gebruikt (en dan wordt de rest uiteraard niet meer gecontroleerd).quote:Op donderdag 25 september 2014 00:19 schreef Monolith het volgende:
[..]
Zoals ik het zie gebruikt Twig een concept analoog aan JavaBeans. D.w.z. als je ticket.comments gebruikt wordt eigenlijk getComments aangeroepen. Is het bij de JSON dan niet zo dat er rechtstreeks een comments field wordt gepakt ipv dat de getComments methode wordt aangeroepen?
Dat verklaart in dezen dan waarom het daar wel werkte. Het field was namelijk protected.quote:Op donderdag 25 september 2014 00:47 schreef Light het volgende:
[..]
Twig kijkt eerst of het een public property is, dan of het een public method is, daarna of er een public method get... is, vervolgens of er een public method is... bestaat en tenslotte of er een public method has... bestaat. De eerste die werkt, wordt gebruikt (en dan wordt de rest uiteraard niet meer gecontroleerd).
Xdebug werkt inderdaad prima.quote:Op donderdag 25 september 2014 00:29 schreef Monolith het volgende:
Daarom, nogmaals, leer gebruik maken van een debugger. Ik weet dat het in de PHP wereld niet gebruikelijk is, maar het maakt je leven zoveel makkelijker.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |