You are not logged in.

wcf.regNote.message

ShaoKhan

www.Spiegelwelt.com

  • "ShaoKhan" started this thread

Posts: 393

Location: 127.0.0.1

Occupation: EDV Dienstleister

  • Send private message

1

Saturday, October 16th 2004, 7:36pm

Klassen und der Zugriff darauf

Hoi Leutz.

nu bin ich auch da angelang, mal was in Klassen in PHP zu machen. Kann mir vielleicht jemand einleuchtend erklären, wie ich diese erstelle und dann darauf zugreife ?

class db {

var $host = "host";
var $id = "1234567";
var $pw = "XXXXXX"

function db_opn {
....
}
}

So in etwa ?

Danke euch.

sincerly............ShaoKhan
Leben heisst - Narben tragen.

Prometheus

Administrator

Posts: 3,278

  • Send private message

2

Saturday, October 16th 2004, 8:21pm

jep dein ansatz ist schon richtig. zuerst legst du den namen der klasse fest (class db in deinem beispiel) und anschließend werden die variablen festgelegt die global in der klasse aktiv sind. danach kommen dann die einzelnen funktionen innerhalb der klasse. aufgerufen wird die klasse dann erstmal durch ein require und dann können die funktionen benutzt werden mit z.b.

PHP Source code

1
$result $db->query("SELECT...");


hier noch ein link für ne genauere erklärung. klick
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

3

Monday, October 18th 2004, 10:21am

also ich würde klassen in eine eigene datei auslagern.

du hast zum beispiel deine klasse db von obem in der datei Cdb.php

dann musst du in dem script wo du die nutzen willst ein

Source code

1
require_once("Cdb.php"); 


machen (oder require, oder iclude, ode rinclude_once, was du halt willst) und dann kannst du per


Source code

1
$oDb = &new db();


eine Instantz erzeugen.

wie von anderer stelle gewohnt kannst du jetzt mit

Source code

1
$oOdb->db_opn();


die methode db_opn ausführen.

du musst allerdings gucken, dass du zwar bei

Source code

1
class db {


keine parameter angeben musst, da du das über die function db, also den konstruktor, erledigst, dies aber später bei den funktionen schon tun solltest. (bei db_opn stehen da in dem beispiel keine runden klammern für parameter)

das zerstören von objekten ist relativ überflüssig, da bei scriptende logischerweise autmoatisch jedes objekt zerstört wird.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

4

Monday, October 18th 2004, 10:31pm

Ich find Beispielcode is immer noch am besten :)
Datei foo.php

PHP Source code

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
<?
Class Foo {
           var  $bla,
                  $bar;
 
           function Foo() // Default Konstruktor
           {
                 // Initialisierung
                 $this->bla 5;
                 $this->bar 0;
           }

           function Foo($init// Konstruktor mit Param
           {
                 // Zugriff auf Membervariablen mit $this->
                $this->bla $init;
                $this->bar $init;
           }

           function DoSomething($add)
           {
                 // aufrufe von Memberfunktionen auch mit $this->
                 $this->NeededByDoSomething($add);
                 return $this->bla $this->bar;
           }

           function NeededByDoSomething($toadd)
           {
                  $this->bar $toadd;
           }
}
?>

....in einer anderen Datei:

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
<?
include("foo.php");
$foo1 = new Foo();
$foo2 = new Foo(3);

print $foo1->DoSomething(5); // gibt 10 aus
print $foo2->DoSomething(5); // gibt 8 aus
$foo->bla 10;
print $foo2->DoSomething(5); // gibt 15 aus

?>


So ich denke ich hab alles mit drin :)

Ciao Ephraim

ShaoKhan

www.Spiegelwelt.com

  • "ShaoKhan" started this thread

Posts: 393

Location: 127.0.0.1

Occupation: EDV Dienstleister

  • Send private message

5

Monday, October 18th 2004, 10:35pm

ok, dann probier ich das so. Dank euch.

sincerly............ShaoKhan
Leben heisst - Narben tragen.

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

6

Tuesday, October 26th 2004, 3:35pm

hmm ich seh grade du hast ja da 2 konstruktoren. aber ich dachte immer PHP kann nichts überladen. bin ich da falsch informiert ?


EDIT: ich habs getestet. ich bekomme ein warning:

Warning: Missing argument 1 for foo() in /http_server/htdocs/test/foo.php on line 13

ich gehe davon aus, dass für PHP nur die letze definition der Funktion mit dem namen foo gültig ist.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

7

Tuesday, October 26th 2004, 4:23pm

Hab bei meinem Beispiel nicht beachtet des PHP Überladen nicht zu lässt.
Danke an Menthanar der mich darauf hingewiesen hat :).
Hab aber hier jetzt die Klasse und die Anwendung der Klasse mal ein bissel umgebaut.
Jetzt macht sie genau das selbe wie gedanklich oben die Klasse hätte machen sollen ;)
Und jetzt ist sie auch getestet und funktionsfähig.

PHP Source code

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
<?
Class Foo {
           var  $bla,
                $bar;

           function Foo($init 0// Konstruktor mit Param und Default Wert für den Parameter
           {
                 // Zugriff auf Membervariablen mit $this->
                $this->bla = ($init $init 5);
                $this->bar $init;
           }

           function DoSomething($add)
           {
                 // aufrufe von Memberfunktionen auch mit $this->
                 $this->NeededByDoSomething($add);
                 return $this->bla $this->bar;
           }

           function NeededByDoSomething($toadd)
           {
                  $this->bar $toadd;
           }
}

$foo1 = new Foo();
$foo2 = new Foo(3);

print $foo1->DoSomething(5); // gibt 10 aus
print $foo2->DoSomething(5); // gibt 8 aus
$foo2->bla 10;
print $foo2->DoSomething(5); // gibt 15 aus
?>


Ciao Ephraim

wcf.user.socialbookmarks.titel