php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.12.2009, 17:30  
Erfahrener Benutzer
 
Benutzerbild von taurus
 
Registriert seit: 01.11.2008
Beiträge: 825
PHP-Kenntnisse:
Anfänger
taurus ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Erledigt] variable außerhalb einer klasse definieren - "var $variable" in klasse not

Hi,

ich versuch mich gerade in klassen..
PHP-Code:
class SimpleClass
{
    
$var 'a default value';

    
// method declaration
    
function displayVar() {
        echo 
$this->var;
    }

logischerweise muss ich hier die variable $var definieren damit diese einen wert hat..


was mir aber nicht ganz klar ist warum in der klasse die ich gerade umschreibe die variable max_filesize am anfang definiert wird?

max_filesize wird ja wie unten zu sehen in der datei mit dem formular bereits mit einem wert intialisiert.
d.h. ich bräuchte "var $max_filesize;" am anfang der klasse doch gar nicht? oder gibt es einen grund warum das dort deklariert wird?

Datei: upload class
PHP-Code:
class picupload {

var 
$max_filesize;

    function 
check_file_size($file) {
        
        
$ret FALSE;
        
        
$max_value $this->max_filesize;        
        
$file_size filesize($file);
        if(
$file_size $max_value) {
            
$ret TRUE;
        }
        return 
$ret;
    }


Datei mit Formular und Parametern für die Klasse
PHP-Code:
$upload = new pic_upload;
$upload->max_filesize 60000

Geändert von taurus (03.12.2009 um 17:34 Uhr).
taurus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.12.2009, 17:37  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

PHP-Code:
class SimpleClass
{
    
$var 'a default value';

    
// method declaration
    
function displayVar() {
        echo 
$this->var;
    }

PHP-Code:
class picupload {

var 
$max_filesize;

    function 
check_file_size($file) {
        
$max_value $this->max_filesize;        
    }


Wirds jetzt klarer? Falls Deine Frage ist, warum die Variable nicht initialisiert wird:
Nun, das muß ja nicht immer sinnvoll sein. Mann könnte nun auch
PHP-Code:
var $max_filesize null
schreiben, aber ob das nun besser ist?

Noch zwei Anmekungen:
1. OOP ist ein schnittstellenorientierter Ansatz. Das heißt, mit das wichtigste Konzept daran ist, dass Objekte auf eine bestimmte Art dauerhaft und nachhaltig definiert sind. Die Klasse bildet einen Bauplan, der nicht nur dem abgeleiteten Objekt, sondern auch anderen zugreifenden Elementen sozusagen garantiert, dass bestimmte Eigenschaften und bestimmte Zugriffsmöglichkeiten in diesem Objekt vorhanden und auf dieses Objekt möglich sind. Das ist ein wichtiger Punkt in der OOP, der sie bspw. von Konzepten wie assoziativen Arrays unterscheidet.
Das Konzept geht soweit, dass ich mit abstrakten Methoden und Interfaces (zumindest Methoden) verbindlich definieren kann. D.h. Ein Objekt, das sagt „ich bin ein Auto“, aber gar keine Räder hat, gar nicht erst instaziiert werden kann.
2. Du solltest Dich von var verabschieden. OOP-gerecht werden Klassenmember mit Sichtbarkeiten (public / protected / private) deklariert, die letzten Endes etwas mit Punkt 1 zun tun haben.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 03.12.2009, 17:39  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.637
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von taurus Beitrag anzeigen
d.h. ich bräuchte "var $max_filesize;" am anfang der klasse doch gar nicht? oder gibt es einen grund warum das dort deklariert wird?
Unter anderem: sauberer Programmierstil.

Außerdem erfolgt der Zugriff von außen im Regelfall über Getter/Setter Methoden um die Dömäne der Membervariablen nicht zu verletzen.

Z.B. könnte in deinem Fall die Variable als private deklariert werden sodass der Zugriff von außen nicht mehr möglich ist. Über eine Setter Methode könnte man die Variable von außen setzen lassen und vorher prüfen ob ein gültiger Wert eingegeben wurde oder nicht.

Des weiteren gibt es noch die magischen Methoden __get und __set um zu bestimmen wie mit undefinierten Variablen umgegangen werden soll. Wenn aber prinzipiell keine verwendete Variable definiert ist gibt es ein Problem.

Wenn du gerade mit Klassen anfängst gewöhn dir am besten direkt an private, protected und public für Variablen und Funktionen zu benutzen.
Dark Guardian ist offline  
Alt 03.12.2009, 18:36  
Erfahrener Benutzer
 
Benutzerbild von taurus
 
Registriert seit: 01.11.2008
Beiträge: 825
PHP-Kenntnisse:
Anfänger
taurus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

mhh muss ich mich wohl noch ein wenig einarbeiten so ganz blick ich da noch nicht durch ^^

aber prinzipiell müsste ich "var $max_file_size nicht mit in die klasse schreiben, jedoch wenn ich die klasse aufrufe und diese variable nicht von außerhalb mit einem wert belege, gibts einen fehler, d.h. sauberer programmierstil -> variable definieren

richtig oder?


ich hab in der upload klasse nun ein paar variablen die ich in der klasse fest implementiert haben will, daher von außen soll diese nicht änderbar sein.
dann müsste ich diese am anfang mit
PHP-Code:
private $renamefile true
angeben und ich könnte von außen diese nicht mehr auf false setzen, richtig?
EDIT: protected/vererbung lass ich mal beiseite werde ich in dieser klasse nicht benötigen.

im gegensatz dazu schreibe ich variablen die ich von außerhalb mit parametern versehe so in die klasse:
PHP-Code:
public $img_x_size 468;
public 
$img_y_size 60
genauso handhabe ich das mit den functionen. hier definiere ich alle als private da ich von außerhalb keine funktion aufrufe/veränder/etc.. (wovon ich auch nichtma weiß wie ich das gehen soll ist aber jetzt nicht wichtig..

PHP-Code:
    private function check_img_size($file) {
    
    } 
soweit ist das alles richtig gelle? über sinn und anwendung von objekten werde ich mich noch einlesen...

danke für eure hilfe!
taurus ist offline  
Alt 03.12.2009, 19:21  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

alles was von "außen" kommt brauchst nicht zu deklarieren.

Alles andere, alles was Du irgendwo mit $this->var ansprichst
solltest Du deklarieren/initilisieren.

Innerhalb von Methoden kannst temporäre Variablen verwenden
die Du nicht deklarieren mußt:

function machwas(){

$tmp = 10;

for($tmp ....

}
Koala ist offline  
Alt 03.12.2009, 19:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
alles was von "außen" kommt brauchst nicht zu deklarieren.
Weil? Ich finde das hängt stark davon ab, als was man Objekte begreift. Oben schrieb ich als definierte Schnittstelle, genauso kann man ein Objekt als Container sehen, in den man alles reindrücken kann, aber gute OOP ist das IMHO in nur seltenen Fällen. Klar, man kann sein „Autoobjekt“ benutzen, um darin vorübergehend sein „Hundobjekt“ abzulegen. Auch, um 10000 Hundobjekte darin abzulegen. Nur hat das mit Reale-Welt-Analogie nicht mehr viel zu tun. Mit einer Methode, die Zugriff auf alle 5 Sitze und den Kofferaum bietet, sähe das schon wieder etwas anders aus.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (03.12.2009 um 19:29 Uhr).
nikosch ist gerade online  
Alt 03.12.2009, 19:51  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

ich weiß nicht ob wir das selbe meinen ...

PHP-Code:


class meine{

public 
von_aussen ''// ist unnötig, da der Wert eh nie gesetzt wird

public intern '';

// und hier ist er dann sowieso auch noch als Defaultwert drin,
// falls der Parameter fehlt
function __construct($von_aussen 0) {

   if(!empty(
$von_aussen)) 

     
$this->intern $von_aussen;

}

Wieso soll ich $von_aussen deklarieren ?
Wo drücke ich hier Hunde in ein Auto ?

Geändert von Koala (03.12.2009 um 19:54 Uhr).
Koala ist offline  
Alt 03.12.2009, 19:51  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

das hier ist PHP 4:
PHP-Code:
<?php
class MyClass {
  var 
$myProperty "abc";

  function 
myMethod() {
    
// ..
  
}
}
?>
das die "neue" Schreibweise in PHP 5:
PHP-Code:
<?php
class MyClass {
  protected 
$myProperty "abc";
  
  public function 
myMethod() {
    
// ..
  
}
}
?>
Nun hast du also Sichtbarkeiten eingestellt. public ist von außen sichtbar (vielmehr ansprechbar), protected nicht. Das Prinzip ist aber das selbe. Variablen, die du als Eigenschaften der Klasse definierst (Auto hat Reifen, User hat Name, ..) deklarierst du im Klassen-"Kopf".
Chriz ist offline  
Alt 03.12.2009, 21:38  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Koala: Nein, meinten wir nicht. Ich vermutete, Du meintest das:

PHP-Code:
class Car
  
{
  protected 
$wheels;
  
  function 
__construct ()
    {
    
$this->wheels 4;
    }
  }

class 
Dog {}


$myNewCar = new Car;

$dogs array_fill (10000 , new Dog);

// Car ist nur ein Container, in den jeder seinen Müll wirft.

$myNewCar->is   'nice';
$myNewCar->dogs $dogs;
$myNewCar->more "trash that don't belongs here"
Getter/Setter Methoden sind natürlich das Ultimo, aber selbst aller „erwünschten“ Variablen zu definieren, ist guter Stil in der OOP.

[edit]

Der Vollständigkeit halber

PHP-Code:
<?php

class Car
  
{
  protected 
$wheels;
  protected 
$maxPassengers 4;
  protected 
$driver     null;
  protected 
$passengers = array ();
  
  function 
__construct ()
    {
    
$this->wheels 4;
    }


  function 
setDriver ($driver)
    {
    
$this->driver $driver;
    }


  function 
setPassengers ($passengers)
    {
    
$passengers = (array) $passengers;
    if (
$this->maxPassengers count ($passengers)) {
      throw new 
exception ('not enough space inside the car');
      }
    
    
$this->passengers $passengers;
    }
  }



class 
Dog {}


$myNewCar = new Car;

$dogs array_fill (10000 , new Dog);

$myNewCar->setPassengers ($dogs); // will throw exception
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (03.12.2009 um 21:47 Uhr).
nikosch ist gerade online  
Alt 03.12.2009, 21:58  
Erfahrener Benutzer
 
Benutzerbild von taurus
 
Registriert seit: 01.11.2008
Beiträge: 825
PHP-Kenntnisse:
Anfänger
taurus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@koala ich liste im kopf der klasse trotzdem alle variablen auf, teilweise mit einem standard wert.
wenn ich dann die klasse mit anderen werten nutzen will als vorgegeben gebe ich von außerhalb der variable einfach einen anderen wert...

is doch besser am anfang der klasse variablen einen standardwert zu geben anstatt in den funktionen selbst.. womöglich die gleiche variable in mehr als einer funktion?

wenn eine variable von aussen definiert werden MUSS (weil ich das so will ) liste ich sie auch am anfang auf... dann weiß ich welche variablen ich definieren muss oder nicht damit die klasse seine funktion hat die es haben soll...

war das am thema vorbei? die letzten beiden threads versteh ich nicht auf die schnelle ^^ was setter und getter methoden sind auch nicht.. aber das bring ich mir dann schon bei.. das hat noch zeit
taurus 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
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
Variable setzen außerhalb von der Klasse phpbeginner PHP Tipps 2007 13 28.03.2007 14:09
PHP 5 : Methode außerhalb der Klasse definieren Unknown PHP Tipps 2006 9 23.05.2006 11:31
Variable in $this Variable der Klasse benutzen PHP Tipps 2006 5 03.05.2006 20:04
Variable in einer Klasse definieren Simon9990 PHP Tipps 2006 5 01.02.2006 23:25
[Erledigt] Variable erst später definieren? PHP Tipps 2004-2 10 04.12.2004 20:23

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-einsteiger/61930-erledigt-variable-aussyerhalb-einer-klasse-definieren-var-variable-klasse-not.html, php variable definieren, php variablen definieren, php variable außerhalb klasse, php variable ausserhalb klasse, php variable deklarieren, php variablen außerhalb klassen, php variablen ausserhalb von klassen, php variable aus einer klasse, variablen außerhalb von klassen, variable definieren in var klasse, variable in class deklarieren, php variablen definieren in einer klasse, variable in klasse definieren, php variable deklarieren methode, php variablen deklarieren, php class variable von ausserhalb, &quot nicht deklariert, php variable nichtmehr definiert, variablen von einer klasse hinzufügen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:47 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