Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] OOP Probleempje (https://forum.scholieren.com/showthread.php?t=257880)

Kozak 24-10-2002 19:04

[PHP] OOP Probleempje
 
Ik heb net OOP programmeren ontdekt, en ik ben nog een beetje spoorloos.
Ik heb gehoord dat alle variablen die je gebruikt in je classe, in je classe gedefinieerd moeten zijn.
Ik neem het volgende voorbeeld:
PHP-code:

class page{

    var 
$m_lib_path;        // path from including file to /lib/
    
var $m_base_url;        // in this case, "http://www.xxxxxx.com/"
    
var $m_title;            // string
    
var $m_linkbar;            // array of associative arrays
                    // "name" => link text, "url" => link href, "alt" => alt text
    
var $m_content;            // string
    
var $m_section;            // string
    
var $m_menu;            // array of associative arrays
                    // "key" => menu key, "title" => menu title, 
                    // "style" => menu style attributes, "content" => menu content
    
var $m_icon;            // string
    
var $m_header;            // string for extra stuff to add to the header (scripts, meta tags etc)
    
var $m_session;            // contains an associative array of the user data
    
var $m_con;            // MySQL connection
    
var $m_time;

/* ----------- CONSTRUCTOR ----------- */

    
function page($lib_path$session$base_url "http://www.xxxxx.com")
    {
        
$this->m_time            $this->getmicrotime();
        
$this->m_lib_path        $lib_path;
        
$this->m_base_url        $base_url;
        
$this->m_title            "";
        
$this->m_linkbar        = array();
        
$this->m_content        "";
        
$this->m_section        "";
        
$this->m_menu            = array();
        
$this->m_icon            "siteicon.ico";
        
$this->m_header            "";
        
$this->m_session        = array();
        
$this->con mysql_connect("xxxxx""jxxx""xxxx") or die("Error connecting to the database");
        
mysql_select_db("xxxx"$this->con) or die("Error selecting database");
        
$this->setSession($session);
    }


Ik zie hier in allemaal variabelen die niet zijn gedefinieerd, zoals bijvoorbeeld '$this','$lib_path'. Daarentegen zie ik de gedefineerde variabelen allemaal achter het object $this staan. Dus zijn dit eigenlijk geen variabelen? Weet iemand me te helpen?

jungle_brother 24-10-2002 19:43

Met "this" geef je aan dat het de variabelen in de klasse zelf betreft. Het is een verwijzing naar het object "page". Corrigeer me maar als dit fout is....
De variabele "$lib_path" wordt als argument met de functie meegegeven. Deze hoeft daarom niet perse in de klasse zelf gedefinieerd te worden. Echter wanneer je een variabele in klasse "$lib_path" noemt, moet je deze een waarde geven middels de code $this->lib_path = $lib_path;.
Dit vult de variabele in de klasse met de waarde meegeven via het argument in de functie.
Even een JAVA voorbeeld (Lijkt veel op PHP):

// Een stukje code van mijn Tetris Applet

protected class Matrix {

protected int xyz[][];

Matrix (int xyz[][]) {
this.xyz = new int[4][8];
if (xyz != null) {
for (int i=0; i<4; i++)
for (int j=0; j<8; j++) {
this.xyz[i][j] = xyz[i][j];
}
}
}

}

Je ziet dat xyz als argument wordt meegeven, maar ook in de klasse bestaat. Om nu conform de regels deze variabele te vullen, moet dit gedaan worden met de regel this.xyz[i][j] = xyz[i][j];.

Ik hoop dat je deze uitleg een beetje snapt..... :rolleyes:

Chimera 25-10-2002 08:16

Citaat:

jungle_brother schreef:
Met "this" geef je aan dat het de variabelen in de klasse zelf betreft. Het is een verwijzing naar het object "page". Corrigeer me maar als dit fout is....

$this is PHP is gewoon een reference naar 'jezelf'. Je kunt $this dus gewoon als object benaderen, alle variabelen en methoden zijn gewoon bereikbaar, en je kunt $this ook in een functie retourneren. Je zou 'this' ook 'ikzelf' kunnen noemen.

$this wordt meestal gebruikt om member variabelen te benaderen als deze door lokale variabelen onzichtbaar zijn gemaakt. Voorbeeld:

Code:


public class Test {
    private int testInt = 0;

    public void addA(int testInt) {
        testInt += testInt;
        /*
          * Dit doet niks omdat je een lokale var bij een lokale var
          * optelt. De lokale var verbergt de member var.
          */
  }

    public void addB(int testInt) {
        this.testInt += testInt;
        /*
          * En dit werkt prima.
          */
  }
}

Java voorbeeldje, maar in PHP en (bijvoorbeeld) C# werkt dit precies hetzelfde.

Manuzhai 25-10-2002 16:35

Alleen is $this in PHP verplicht, terwijl het in Java alleen gebruikt wordt om onderscheid te maken als dat niet duidelijk is tussen een lokale en een object-wide variabele.


Alle tijden zijn GMT +1. Het is nu 13:43.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.