Online Webmasters - Het forum voor webmasters: Beginnend Oop'er door Vii

Ga naar inhoud

Pagina 1 van 1
  • Je kunt geen nieuwe topic starten
  • Je kunt niet antwoorden op deze topic

Beginnend Oop'er Score Topic: -----

#1 Gebruiker is offline   Vii 

  • Newbie
  • Pip
  • Groep: Members
  • Posts: 2
  • Lid geworden: 26 maart 2010

Gepost 26 maart 2010 - 10:03

Hey mensen, ik ben een beginnend OOP'er en ik ben een beetje aan het kloten wat static etc doet en wanneer ik :: en -> moet gebruiken daardoor heb ik de volgende testclass geschreven, kunnen jullie tips / fouten aan me doorgeven daar kan ik daar op verder werken:

<?php

/**
 * @author Patrick Rennings
 * @copyright 2010
 */

class TestClass {
    
    
    public static $StatVar;
    public $DynVar;
    
    public static function StatSet ( $var = NULL )
    {
        
        if ( is_string ( $var ) )
        {
            
            self::$StatVar = $var;
            
        }
        
    }
    
    public function DynSet ( $var = NULL )
    {
        
        if ( is_string ( $var ) )
        {
        
            $this->DynVar = $var;
        
        }
        
    }
    
    public function ReturnResults ( )
    {
        
        return self::$StatVar . ' <br /> ' $this->DynVar;
        
    }
    
}

TestClass::$StatVar = ' Static variable ';
$Class1 = new TestClass;
$Class1->DynSet( 'Dynamic variable' );

# Result: Static variable <br /> Dynamic variable
$Class1->ReturnResults();



$Class2 = new TestClass;
$Class2->DynSet( 'Dynamic variable second edition' );

# Result: Static variable <br /> Dynamic variable second edition
$Class2->ReturnResults();



$Class3 = new TestClass;

# Result: Static variable <br />
$Class3->ReturnResults();


TestClass::$StatVar = ' Static Variable second edition ';
$class4 = new TestClass;
$Class4->DynSet( 'Dynamic variable thirth edition' );

# Result: Static variable second edition <br /> Dynamic variable thirth edition
$Class4->ReturnResults();


?>


Versie 2:


<?php

/**
 * @author Patrick Rennings
 * @copyright 2010
 */

Class TestClass
{
    
    public static $StatVar;
    public $StatVar;
    
    public function __SET ( $var = NULL, $spec = NULL )
    {
        
        if ( is_string ( $var ) )
        {
        
            if ( $spec == 'static' )
            {
                    
                $this->setstatic ( $var );
                
            }
            else
            {
                
                $this->setdyn ( $var );
                
            }
            
        }
        
    }
    
    private function SetStatic ( $var = NULL )
    {
        
        self::$StatVar = $var;
        return;
        
    }
    
    private function SetDyn ( $var = NULL )
    {
        
        $this->DynVar = $var;
        
    }
    
    public function __GET ( )
    {
        
        return $this->DynVar . ' <br /> ' . self:$StatVar;
        
    }
    
}

?>



Geprobeerd met __GET en __SET te werken
0

#2 Gebruiker is offline   developer 

  • Advanced Member
  • Pip Pip Pip
  • Groep: Members
  • Posts: 148
  • Lid geworden: 10 maart 2010
  • LocationGelderland ^-^

Gepost 27 maart 2010 - 15:47

Je controle in de methode StatSet heeft niet veel zin aangezien variabele $StatVar public is. Je kan hem dus ook direct benaderen. In het tweede voorbeeld schrijf je "class" met hoofdletter, volgens mij mag dat niet. De functies __GET en __SET zou ik ook gewoon met kleine letters schrijven, dat wordt overal zo gedaan (http://php.net/manua...overloading.php). Dan weet je zeker dat je code nog werkt wanneer ze de regels strenger maken.

In je tweede voorbeeld kan je maximaal 1 static en 1 niet static variabele aanmaken. De kracht van __set en __get is juist dat dat er meer kunnen zijn. Anders kan je net zo goed een standaard variabele hebben en een gewone set/get methode. Voorbeeld waarbij je __set en __get kan gebruiken:

class Framework() {
  public function __construct() {}

  public function __set($classname, $value) {
    //Controleer $classname (strip tekens zoals "." etc. en controleer lengte). return false als er iets niet klopt.
    if(file_exists("classes/$classname.class.php") {
      require_once(classes/$classname.class.php);
      $this->$classname = new $classname();
      return $this->$classname;
    }
    return false;
}

$framework = new Framework();

//Doe een query met je eigen framework.
$framework->Database->select("QUERY");

//De instantie van Framework kent nog geen Database variabele dus maakt hij een instantie van de klasse Database aan en geeft hij die terug.
//De volgende keer bestaat variabele Database al wel en gebruikt hij die. Zo laadt je framework alleen wat nodig is.


Zomaar een voorbeeldje. Heb de code ook niet getest dus er kan een foutje in zitten.

Laatste puntje: wat heb je er aan om default waarde van parameter in set methode "NULL" te hebben? Het is natuurlijk maar een testclass, maar toch.
0

#3 Gebruiker is offline   Vii 

  • Newbie
  • Pip
  • Groep: Members
  • Posts: 2
  • Lid geworden: 26 maart 2010

Gepost 29 maart 2010 - 08:16

Wat raden jullie aan om te doen bij een database connectie,
een complete database class schrijven of gewoon PDO gebruiken?

Daarnaast wanneer je een user class wil gebruiken.
hem dan extenden vanuit de database class en er een child class van maken of een aparte class en
gewoon de database class gewoon van buiten uit aanmaken?
0

#4 Gast:Coding KidGast:*

  • Groep: Guests

Gepost 29 maart 2010 - 20:35

Bekijk Post developer, op 27 maart 2010 - 15:47 , zei:

//De instantie van Framework kent nog geen Database variabele dus maakt hij een instantie van de klasse Database aan en geeft hij die terug.
//De volgende keer bestaat variabele Database al wel en gebruikt hij die. Zo laadt je framework alleen wat nodig is.


Hé, dat wist ik niet. Hoe heet dat? Ik vind er niet meteen iets over terug op php.net.
0

#5 Gebruiker is offline   developer 

  • Advanced Member
  • Pip Pip Pip
  • Groep: Members
  • Posts: 148
  • Lid geworden: 10 maart 2010
  • LocationGelderland ^-^

Gepost 30 maart 2010 - 00:08

Bekijk Post Coding Kid, op 29 maart 2010 - 20:35 , zei:

Bekijk Post developer, op 27 maart 2010 - 15:47 , zei:

//De instantie van Framework kent nog geen Database variabele dus maakt hij een instantie van de klasse Database aan en geeft hij die terug.
//De volgende keer bestaat variabele Database al wel en gebruikt hij die. Zo laadt je framework alleen wat nodig is.


Hé, dat wist ik niet. Hoe heet dat? Ik vind er niet meteen iets over terug op php.net.

Wat snap je niet? In de link in mijn vorige post wordt __set() uitgelegd. Dit is slechts 1 van de vele toepassingen ervan.

@Vii: Als je grotere websites wil gaan maken raad ik aan om een framework zoals bijv. Codeigniter te gebruiken (echt een aanrader). Elk framework heeft zijn eigen database classes. Het is niet perse dat als je geen PDO gebruikt dat je dan slecht bezig bent. Veel functionaliteit (zoals dat je makkelijk kan overschakelen naar andere databases zoals MSSQL of wat dan ook) gebruik je niet. Er zijn zat gratis te downloaden goede SQL classes die voldoen. Zelf maken is natuurlijk leuk maar het kost wel een beetje tijd en er zit de kans in dat het script wat minder veilig is. Zet er dan iig een functie in die bijv. alle waardes uit een array veilig kan maken (door ze door mysql_real_escape_string te halen). Als het in je class makkelijk is om data te beveiligen alvorens je een query uitvoert dan gebruik je het meer. Voordeel van bestaande classes is meestal dat ze op die punten goed uitgewerkt zijn (bijv. door automatisch input databaseveilig maken).
0

Deel dit topic:


Pagina 1 van 1
  • Je kunt geen nieuwe topic starten
  • Je kunt niet antwoorden op deze topic