php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.09.2006, 14:06  
Neuer Benutzer
 
Registriert seit: 07.11.2005
Beiträge: 17
remotemonkey
Standard wie kann man unterklassen erstellen?

ich hötte gerne innerhalb einer classe ne weitere classe

z.B. $klasse1->unterklasse2->funktion

wie macht man sowas?
remotemonkey ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.09.2006, 14:22  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Entweder class oder Klasse, aber nicht classe.

Deine Frage ist für mich unverständlich. Möchtest du innerhalb einer Klasse eine weitere Klasse einbinden und ansprechen?

PHP-Code:
<?php
class A
{
  private 
$b;
  function 
__construct()
  {
    include 
'class.B.php';
    
$this->= new B();
    
$this->b->methodInB();
  }
}
?>
Zergling-new ist offline  
Alt 16.09.2006, 14:52  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

oder du meinst irgendwas wie
PHP-Code:
<?php
class ExtendClass extends SimpleClass
{
   
// Die Vatermethode überschreiben
   
function displayVar()
   {
       echo 
"Erweiternde Klasse\n";
       
parent::displayVar();
   }
}

$extended = new ExtendClass();
$extended->displayVar();
?>
www.php.net/class


meinst sowas??


mfg
Andi
DER_Brain ist offline  
Alt 16.09.2006, 21:35  
Neuer Benutzer
 
Registriert seit: 07.11.2005
Beiträge: 17
remotemonkey
Standard

ich will z.b. sowas machen:

PHP-Code:
<?php
include "klassen.inc.php"#in der datei sollen halt die ganzen klassen stehen und initialisiert (also $user = new user()) werden
echo $user->username->show();
$user->username->edit("blablabla");
?>
und so weiter
wie müssten die klassen in der datei (für diese beiden funktionen) genau aussehen?
remotemonkey ist offline  
Alt 17.09.2006, 01:05  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Zunächstmal packe nicht alle Klassen in eine Funktion. Das wäre a) der Wahnsinn, eine solche Datei zu überblicken (kompletter Quellcode in deiner Datei!) und b) wäre es unwirtschaftlich Klaasen zu laden, die du vielleicht garnicht brauchst.

Zu deiner Frage. Da gibt es natürlich unendlich viele Wege. Einer wäre z.B.:
PHP-Code:
<?php

class User extends DataObject // oder so...
{
    public 
$username null;

    public function 
loadById($sId)
    {
        
// z.B. Datenbankabfrage; Benutzername sei in $aUserdata['username']

        
$this->username = new IdString($aUserdata['username']);
    }

}

class 
IdString extends DataType
{
    protected 
$sValue null;

    private function 
__construct($sValue null)
    {
        
$this->sValue $sValue;
    }

    private function 
show()
    {
        return 
$this->sValue();
    }

    public function 
edit($sValue)
    {
        
$this->sValue $sValue;
    }
}
?>
In dem Fall wären get und set sinnigere Bezeichnungen als show und edit. Auch macht so ein spezielles Datentypen-Objekt eigentlich nur Sinn, wenn du die Werte darüber validieren möchtest oder sonst was spezielles damit anstellen möhtest (automatische Formular-Geneirung viellecht, was weiß ich). Andernfalls kannst du ja direkt auf den Benutzernamen zugreifen:

$User->username = 'paul';
echo $User->username;

Basti
Basti ist offline  
Alt 20.09.2006, 19:58  
Neuer Benutzer
 
Registriert seit: 07.11.2005
Beiträge: 17
remotemonkey
Standard

grml, ich bekomms einfach nicht hin

ich poste mal nen konkreten beispiel mit anwendungsbeispiel

PHP-Code:
<?php

$id 
4;
$topic "Testposting";


class 
db
    
{
    function 
get_post_topic($id)
        {
        global 
$topic;
        return 
$topic;
        }
    }
    
class 
post
    
{
    function 
add()
        {
        return 
'post_hinzuf&uuml;gen.html';
        }
    function 
edit($id)
        {
        global 
$db;
        return 
'post_'.$db->get_post_topic($id).'_bearbeiten_'.$id.'.html';
        }
    function 
show($id)
        {
        global 
$db;
        return 
'post_'.$db->get_post_topic($id).'_anzeigen_'.$id.'.html';
        }
    }


class 
seo
    
{
    
$this->post = new post();
    }

$db = new db;
$seo = new seo;


echo 
'[url="'.$seo->post->add().'"]Neues Posting[/url]
'
;
echo 
'[url="'.$seo->post->edit($id).'"]Posting [b]&quot;$topic&quot;[/b] editieren[/url]
'
;
echo 
'[url="'.$seo->post->show($id).'"]Posting [b]&quot;$topic&quot;[/b] anzeigen[/url]
'
;
?>

wie müssten nun die klassen verschachtelt werden?
remotemonkey ist offline  
Alt 21.09.2006, 05:58  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Mach dir (oder uns) erstmal klar, welche Abhängkeiten zwischen diesen Objekten bestehen. Konkret: Post greift auf Db zu, "Seo" (wofür steht das?) aus Post. Ist Db in Post oder in Seo zu halten? Dein direktes Problem ist nur, das du die Syntax nicht verstanden hast ... dafür gibt es das Hanbuch!

Das eigentliche Problem ist aber, das du gerade eben auf ein globales Objekt in $db zugreifst und das ist ... @³§%$! ...

Basti
Basti ist offline  
Alt 21.09.2006, 10:44  
Neuer Benutzer
 
Registriert seit: 07.11.2005
Beiträge: 17
remotemonkey
Standard

das objekt $db ist die DB klasse in der alle datenbank sachen stehen und halt nochmal gespzielle funktionen mit denen ich mit das topic zu ner ID ausgeben lassen kann
normalerweise greift $db nicht auf ne globale variable zurück sondern holt es sich einfach aus der DB
habe das in dem beispiel nur vereinfacht

$db ist ne eigentständige, komplett unabhängige klasse

seo steht für "search engine optimizing" (richtig geschrieben?)
im richtigen script gibts noch $seo->seo_on das den wert 1 oder 0 enthält und in den funktionen zum ausgeben der links abgefragt wird

wenn $seo->seo_on 1 ist werden die html links ausgegeben (die über modrewrite wieder in PHP links umgewandelt werden) und bei $seo->seo_on == 0 werden die phplinks ausgegeben

das ganze dient halt dazu schnell zwischen den HTML links und PHP links umschalten zu können falls ich mal umziehe oder das script weitergebe an leute die kein mod_rewrite haben
ich will also eigentlich "nur" post ind seo haben als unterklasse


ps das unten genannte beispiel het bei mir ebenfalls nicht funktioniert mit der gleichen fehlermeldung wie mein schript
remotemonkey ist offline  
Alt 21.09.2006, 17:20  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Schreib seo mal folgendermaßen um, dann sollte es eigentlich hinhauen:

PHP-Code:
<?php

class seo
{
    public 
$post null;

    public function 
__construct()
    {
        
$this->post = new post();
    }
}
?>
Wenn du noch php 4 verwendest, dann musst du die beiden Ausdrücke public natürlich weglassen und __construct in seo umbenennen.

Aber du hast da einige unschöne Ecken in deinem Entwurf.

Objekt $db:
Auch das solltest du, wenn möglich nicht global einbinden (das meinte ich eigentlich - das $topic nur zum Test gesetzt wurde, war mir schon klar). Und, du solltest das Datenbank-Objekt nicht mit Anfragen, wie getTopicById() aufblähen. Dafür baust du dir besser DAOs (Data Access Objects). Infos darüber gibt es bei phppatterns.com und sicher auch im WACT-Wiki, oder generell z.B. bei Sun:
http://java.sun.com/blueprints/corej...essObject.html

Objekt seo:
Der Name ist untauglich, denn das Objekt optimiert die Site ja nicht für Suchmaschinen (es weiß garnichts von Suchmaschinen und der Site), sondern schreibt einfach bestimmte Kommandos in Links um - in Abhängigkeit davon, ob ein bestimmter Schalter umgelegt ist oder nicht.

Dann finde ich deinen ganzen Umschreibe-Mechanismus merkwürdig:
Zum einen nimmst du ja den Topic und setzt ihn (hier auch ohne urlencode) in den URL. Der wird aber doch bestimmt alle Latin 1 oder UTF 8-Zeichen außer dem Zeilenumbruch enthalten können, oder? Fraglich, ob das dann wirklich so chick ist - genauso, wie dein Link mit dem Umlaut ("hinzufügen").

Fragwürdig ist auch, warum die Verantwortung für die Gestaltung der eigenen Links bei den "Modulen" (post, ...) liegt. Klar, wenn das nur ein Forum ist, hast du das im Blick, aber prinzipiell kannst du so keine Konflikte ausschließen, also vom Entwurf her nicht sauber.

post::add() etc. sind auch verwirrende Bezeichner. Geschickter wäre Post::getAddCommand(), welche dann ein Command-Objekt zurückgibt, dass dann deinem Rewrite-Objekt übergeben wird, ohne dass dieses die Objekte post etc. kennen müsste. Wäre ja auch ausreichend, die Links z.B. wie .../post_add_42.html oder /post/add/42 etc. zu gestalten.

Basti
Basti ist offline  
Alt 08.10.2006, 23:32  
Neuer Benutzer
 
Registriert seit: 07.11.2005
Beiträge: 17
remotemonkey
Standard

sry das ich mich noch garnicht bedankt habe

VIELEN DANK *schleim*


bisher klappt alles super und es ist auch sehr übersichtlich
das einzige was mich stört ist das ich viele klassennamen verliere

gibts irgendeine möglichkeit die ganzen unterklassen von seo mit in die klasse seo zu packen?

so das ich den klassennamen "post" (siehe etwas weiter oben) im script weiterhin benutzen kann?
remotemonkey ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Thumbnail mit genauer Größe erstellen Simon9990 PHP Tipps 2008 9 23.08.2007 05:22
.htpasswd Datei erstellen obi Server, Hosting und Workstations 9 26.09.2006 13:27
darf keine Datenbank erstellen in phpMyAdmin Datenbanken 2 20.10.2005 19:32
Login Bereich erstellen nicobischof PHP Tipps 2005-2 2 17.10.2005 21:40
PHP-Bild direkt im Script erstellen? Mex PHP Tipps 2005-2 10 22.08.2005 21:06
Icons für Pocket-Pcs erstellen? Locutus007 Off-Topic Diskussionen 0 19.08.2005 14:38
Eindeutiger Zähler erstellen geht nicht bendigo Datenbanken 1 18.08.2005 11:36
Wie in DOM eine Textbox erstellen? HTML, Usability und Barrierefreiheit 2 16.08.2005 13:12
Stammbaum erstellen Riot PHP Tipps 2005 17 13.05.2005 16:32
PDF erstellen?! Calli PHP Tipps 2005 5 19.04.2005 09:20
Ordner erstellen und Datei uploaden Juuro PHP Tipps 2005 6 20.01.2005 21:18
[Erledigt] Files von der Platte einlesen und 1File auf Server erstellen PHP Tipps 2004 3 21.08.2004 20:08
Textgrafik aus String erstellen Schaelle PHP Tipps 2004 2 08.08.2004 11:29
einen Text aus verschiedenen Vorlagen erstellen? PHP Tipps 2004 1 05.08.2004 20:00
Ordner per Skript erstellen --> Rechte Problem PHP Tipps 2004 2 06.07.2004 14:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
unterklasse erstellen, objekt einer unterklasse erzeugen, unterklassen objekt erstellen, php kann eine klasse ein objekt einer unterklasse erzeugen, unterklassen erstellen, html unterklassen erstellen, html unterklasse erstellen, php unterklassen in einer datei

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.