abonnement Unibet Coolblue
pi_67947645

cd niet bijgeleverd

Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt

Vorige delen:
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, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70

Zie ook:
  • PHP Dataverwerking
  • Officiële PHP website
  • PHP Documentatie
  • MySQL Reference Manual
  • Yet Another PHP Faq
  • PHP Cheat Sheet
  • PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

    Tutorials:
  • W3Schools PHP
  • W3Schools SQL

    Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/PHP
  •   zondag 12 april 2009 @ 13:47:00 #2
    62215 qu63
    ..de tijd drinkt..
    pi_67947694
    quote:
    Op zondag 12 april 2009 13:43 schreef Light het volgende:

    [..]

    Iets met open(new Topic()), denk ik
    It's Time To Shine
    [i]What would life be like without rhethorical questions?[/i]
    pi_67968752
    tijd voor post
    Just say hi!
      maandag 13 april 2009 @ 14:39:54 #4
    187069 slacker_nl
    Sicko pur sang
    pi_67976323
    $this->post("tvp");
    In theory there is no difference between theory and practice. In practice there is.
      maandag 13 april 2009 @ 14:49:33 #5
    63192 ursel
    "Het Is Hier Fantastisch!
    pi_67976550
    pi_67978592
    quote:
    Op maandag 13 april 2009 14:39 schreef slacker_nl het volgende:
    $this->post("tvp");
      dinsdag 14 april 2009 @ 14:15:39 #7
    107951 JortK
    Immer kwaliteitsposts
    pi_68007068
    Hoe kan ik vanuit een abstracte klasse refereren naar de daadwerkelijk aangeroepen child-klasse? Voorbeeld:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    abstract class A
    {
      public static function 
    foo()
      {
         
    self::bar(); // Werkt niet, geeft melding dat bar() niet bestaat in klasse A
      
    }
    }

    class 
    extends A
    {
      public static function 
    bar()
      {
        
    // Deze functie wil ik dus laten aanroepen
      
    }
    }

    B::foo();
    ?>


    self werkt hier dus niet, omdat het ondanks de child-klasse altijd naar de abstracte klasse zal verwijzen.. Hoe los ik dit op?
    Er zijn meerdere klassen die A extenden, en die allemaal een eigen implementatie van bar() hebben..
    pi_68007198
    Als je in een php script een bestand maakt (er wordt iets geüpload, bijhouden van een log, ..) dan is de owner van dat bestand een pid (van Apache / PHP), anyway

    Wanneer je later als niet-admin dit bestand wel wil keilen kan het natuurlijk niet. Op deze manier krijg je een hoop gebruikers met bestanden die de public_html directory vervuilen

    Hoe los je zoiets op? In het phpscript chownen nadat je een bestand maakt / verplaatst kan je een keer vergeten natuurlijk, is er een beter oplossing?
    pi_68007248
    quote:
    Op dinsdag 14 april 2009 15:05 schreef Intrepidity het volgende:
    Hoe kan ik vanuit een abstracte klasse refereren naar de daadwerkelijk aangeroepen child-klasse? Voorbeeld:
    [ code verwijderd ]

    self werkt hier dus niet, omdat het ondanks de child-klasse altijd naar de abstracte klasse zal verwijzen.. Hoe los ik dit op?
    Er zijn meerdere klassen die A extenden, en die allemaal een eigen implementatie van bar() hebben..
    Je moet de aanwezigheid van bar garanderen, dus hem als abstract declaren in A
    pi_68007375
    quote:
    Op dinsdag 14 april 2009 15:09 schreef Thomass het volgende:

    [..]

    Je moet de aanwezigheid van bar garanderen, dus hem als abstract declaren in A
    Dat werkt ook niet:
    Fatal error: Cannot call abstract method A::bar() in C:\domains\etc\etc\blaat.php on line huppeldepup
    pi_68016887
    Ik denk dat het wel werkt als je ze niet static maakt.. Betwijfel of overerving werkt bij statics, aangezien die niet gevonden zijn aan een instantie maar aan een klasse.
    pi_68017425
    quote:
    Op dinsdag 14 april 2009 15:05 schreef Intrepidity het volgende:
    Hoe kan ik vanuit een abstracte klasse refereren naar de daadwerkelijk aangeroepen child-klasse? Voorbeeld:
    [ code verwijderd ]

    self werkt hier dus niet, omdat het ondanks de child-klasse altijd naar de abstracte klasse zal verwijzen.. Hoe los ik dit op?
    Er zijn meerdere klassen die A extenden, en die allemaal een eigen implementatie van bar() hebben..
    Waarom zijn foo() en bar() static? Als je de verwijzing static weghaalt en self:: vervangt door $this-> dan moet het gewoon werken.
    pi_68018986
    quote:
    Op dinsdag 14 april 2009 19:52 schreef Arjan321 het volgende:
    Ik denk dat het wel werkt als je ze niet static maakt.. Betwijfel of overerving werkt bij statics, aangezien die niet gevonden zijn aan een instantie maar aan een klasse.
    Daar heeft het weinig mee te maken.. klasse B is een uitbreiding op klasse A en erft dus al zijn properties en methodes, static of niet, en moet die ook kunnen gebruiken.. dat de PHP compiler niet snapt dat het in dit geval tijdens runtime self:: moet vervangen door B:: lijkt mij een foutje.. De methodes zijn static omdat ik die juist wil gebruiken om een object te instantieren op een bepaalde manier. Concreet: bar() is een functie die een database-record omzet naar een instantie van een object, foo() wordt een functie die een hele array databaserijen in een keer kan omzetten naar een array met objecten. Aangezien alleen de implementatie van bar() verschillend is per overervende klasse en foo() slechts een domme foreach loop is die tig keer bar() moet aanroepen (die ik niet wil copy-pasten in iedere subclass, das nou juist het idee van OO) leek dit me de juiste oplossing..
    pi_68019131
    quote:
    Op dinsdag 14 april 2009 15:08 schreef Thomass het volgende:
    Hoe los je zoiets op? In het phpscript chownen nadat je een bestand maakt / verplaatst kan je een keer vergeten natuurlijk, is er een beter oplossing?
    Als je dat standaard doet na een upload / copy gaat het altijd goed natuurlijk
    Dit is iig wel de manier waarop ik het doe, als je iets beters hebt wil ik het graag weten
    pi_68019513
    quote:
    Op dinsdag 14 april 2009 20:50 schreef Intrepidity het volgende:

    [..]

    Daar heeft het weinig mee te maken.. klasse B is een uitbreiding op klasse A en erft dus al zijn properties en methodes, static of niet, en moet die ook kunnen gebruiken.. dat de PHP compiler niet snapt dat het in dit geval tijdens runtime self:: moet vervangen door B:: lijkt mij een foutje.. De methodes zijn static omdat ik die juist wil gebruiken om een object te instantieren op een bepaalde manier. Concreet: bar() is een functie die een database-record omzet naar een instantie van een object, foo() wordt een functie die een hele array databaserijen in een keer kan omzetten naar een array met objecten. Aangezien alleen de implementatie van bar() verschillend is per overervende klasse en foo() slechts een domme foreach loop is die tig keer bar() moet aanroepen (die ik niet wil copy-pasten in iedere subclass, das nou juist het idee van OO) leek dit me de juiste oplossing..
    Hm, ja daar heb je denk ik wel een punt.

    Ik denk dat een upgrade hiervoor nodig is. Als ik deze site even snel lees,
    http://nl3.php.net/manual(...)-static-bindings.php lijkt het in php 5.3 gefixed.

    Ergens anders (http://socket7.net/article/php-5-static-and-inheritance) had ik dit gevonden:
    quote:
    ... static method calls are resolved at compile time. When using an explicit class name the method is already identified completely and no inheritance rules apply. If the call is done by self then self is translated to the current class, that is the class the code belongs to. Here also no inheritance rules apply.
    pi_68022333
    Hoe herschrijf ik deze functie zodat ik die switch niet nodig heb en het ook werkt met meer dan 2 elementen in $args?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
      
    public function __call($name$args) {
        switch(
    sizeof($args)) {
          case 
    1:
            return 
    $this->template->$name($args[0]);
            break;
          case 
    2:
            return 
    $this->template->$name($args[0], $args[1]);
            break;
          default:
            return 
    $this->template->$name();
            break;
        }
      }
    ?>
    Trotse poster van het 37000000ste bericht ^O^
    pi_68023198
    quote:
    Op dinsdag 14 april 2009 22:13 schreef daReaper het volgende:
    Hoe herschrijf ik deze functie zodat ik die switch niet nodig heb en het ook werkt met meer dan 2 elementen in $args?
    [ code verwijderd ]
    Zoiets misschien?
    1
    2
    3
      public function __call($name, $args) {
        return call_user_func_array(this->template->$name, $args);
      }
    One cannot make an omelette without
    breaking eggs -- but it is amazing how
    many eggs one can break without making
    a decent omelette.
    pi_68023766
    quote:
    Op dinsdag 14 april 2009 22:30 schreef nightsleeper het volgende:

    [..]

    Zoiets misschien?
    [ code verwijderd ]


    ik krijg:

    Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, '' was given in C:\severjanin\includes\functions.php on line 29
    Trotse poster van het 37000000ste bericht ^O^
    pi_68024507
    quote:
    Op dinsdag 14 april 2009 20:50 schreef Intrepidity het volgende:

    [..]

    Daar heeft het weinig mee te maken.. klasse B is een uitbreiding op klasse A en erft dus al zijn properties en methodes, static of niet, en moet die ook kunnen gebruiken.. dat de PHP compiler niet snapt dat het in dit geval tijdens runtime self:: moet vervangen door B:: lijkt mij een foutje.. De methodes zijn static omdat ik die juist wil gebruiken om een object te instantieren op een bepaalde manier. Concreet: bar() is een functie die een database-record omzet naar een instantie van een object, foo() wordt een functie die een hele array databaserijen in een keer kan omzetten naar een array met objecten. Aangezien alleen de implementatie van bar() verschillend is per overervende klasse en foo() slechts een domme foreach loop is die tig keer bar() moet aanroepen (die ik niet wil copy-pasten in iedere subclass, das nou juist het idee van OO) leek dit me de juiste oplossing..
    Aan de andere kant is een static functie geen onderdeel van een specifiek object. Het is een onderdeel van de class en alle objecten van die class hebben exact dezelfde functie. Dat effect is nog duidelijker bij een static variabele, als je die in object1 aanpast, heeft object2 dezelfde aanpassing gezien.

    Als je dingen uit een database leest en in een specifieke class wilt stoppen dan kun je ook eens kijken naar mysql_fetch_object()
    pi_68031456
    quote:
    Op dinsdag 14 april 2009 23:00 schreef Light het volgende:

    [..]

    Aan de andere kant is een static functie geen onderdeel van een specifiek object. Het is een onderdeel van de class en alle objecten van die class hebben exact dezelfde functie. Dat effect is nog duidelijker bij een static variabele, als je die in object1 aanpast, heeft object2 dezelfde aanpassing gezien.

    Als je dingen uit een database leest en in een specifieke class wilt stoppen dan kun je ook eens kijken naar mysql_fetch_object()
    Maar we hebben het hier ook niet over objecten maar over de klasse. Klasse B is een A, dus heeft alle methoden van A ook.. Een static methode is inderdaad geen onderdeel van een object, maar daar heb ik het ook helemaal niet over. Ik roep iets static aan op B, wat overerft van A, en dat dus ook moet kunnen gebruiken. Overerving gaat niet op object-niveau maar op klasse-niveau...

    Ik fetch mijn data inderdaad al naar een stdClass vanuit de database (maar srsly, gebruikt er nog iemand mysql_* functies tegenwoordig?), maar daar verlies ik flexibiteit mee. Ik wil de mogelijkheid hebben om bijvoorbeeld een categorie_id property in de stdClass om te zetten naar een Categorie-object. Dit kan niet met fetch object, of fetch class, of whatever, dus schrijf ik hier een eigen functie voor. OO werken en dan vervolgens nog klooien met id's lijkt me ook weer niet handig..

    Anyway, blijkbaar kan het gewoon niet ofzo Dan maar een minder elegante methode toepassen
    pi_68032296
    quote:
    Op woensdag 15 april 2009 09:49 schreef Intrepidity het volgende:

    [..]

    maar srsly, gebruikt er nog iemand mysql_* functies tegenwoordig?
    Wat is het alternatief, als ik jullie discussie even onderbreken mag?
    Trotse poster van het 37000000ste bericht ^O^
    pi_68032712
    quote:
    Op woensdag 15 april 2009 10:22 schreef daReaper het volgende:

    [..]

    Wat is het alternatief, als ik jullie discussie even onderbreken mag?
    mysqli, of PDO. Zelf gebruik ik al een poos PDO, werkt erg prettig
    pi_68032894
    quote:
    Op woensdag 15 april 2009 09:49 schreef Intrepidity het volgende:

    [..]

    Maar we hebben het hier ook niet over objecten maar over de klasse. Klasse B is een A, dus heeft alle methoden van A ook.. Een static methode is inderdaad geen onderdeel van een object, maar daar heb ik het ook helemaal niet over. Ik roep iets static aan op B, wat overerft van A, en dat dus ook moet kunnen gebruiken. Overerving gaat niet op object-niveau maar op klasse-niveau...
    Als ik een class A heb met een static variabele, en die class heeft 2 subclasses, namelijk B en C, dan hebben B en C diezelfde static variabele. Verander ik de waarde bij B dan verandert ook de waarde bij C (tenzij er in C een static variabele met dezelfde naam is gedeclareerd).
    quote:
    Ik fetch mijn data inderdaad al naar een stdClass vanuit de database (maar srsly, gebruikt er nog iemand mysql_* functies tegenwoordig?), maar daar verlies ik flexibiteit mee. Ik wil de mogelijkheid hebben om bijvoorbeeld een categorie_id property in de stdClass om te zetten naar een Categorie-object. Dit kan niet met fetch object, of fetch class, of whatever, dus schrijf ik hier een eigen functie voor. OO werken en dan vervolgens nog klooien met id's lijkt me ook weer niet handig..
    Ik gebruik nog wel mysql_* functies. Weliswaar niet direct, maar gewoon aangeroepen vanuit een database-class, maar evengoed wordt er mysql_* gebruikt. En het ging mij er gewoon om dat je met mysql_fetch_object een class kunt opgeven. Eerst worden de databasevelden in het object geladen, daarna wordt de constructor aangeroepen. Dus je kunt ook in de constructor al het een en ander doen met de velden.
    quote:
    Anyway, blijkbaar kan het gewoon niet ofzo Dan maar een minder elegante methode toepassen
    Gewoon foo() kopieren naar de Klasse B. Dan gaat het wel goed.
      woensdag 15 april 2009 @ 10:45:57 #25
    84926 WyriHaximus
    Release the hounds smithers!
    pi_68033035
    1
    2
    3
    4
    <?php
    $this
    ->Posts->create();
    $this->Posts->save(array('body' => 'TVP'));
    ?>
    phluphy for president!
    abonnement Unibet Coolblue
    Forum Opties
    Forumhop:
    Hop naar:
    (afkorting, bv 'KLB')