/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
php typecast problem
Fra : Jacob


Dato : 09-09-09 16:21

Hej Allesammen

jeg håber i kan hjælpe mig med dette problem.

Jeg retunere en klasse fra en funktion for så at benytte mig af dens
funktionalitet. Men da php ikke ved hvilken klasse den er skal jeg
først type caste den. Men hvordan gør jeg det. har prøvet at kigge
flere steder, men kan udmindlbart ikke se nogen løsning.

Har lavet et eksempel nedenunder der måske hjælper på forståelsen.

Håber i kan hjælpe

example:

phpfile.php
include "FunnyClass.php" ;

$object = $FunnyClass::happyday();
echo $object->funnyday; // This line can't be done.


FunnyClass.php

public $funnyday = "Monday";
class FunnyClass{

static public function happyday(){
// making allot of fun
return new FunnyClass();
}
}

 
 
Jonathan Stein (10-09-2009)
Kommentar
Fra : Jonathan Stein


Dato : 10-09-09 13:27

Jacob skrev:

> Har lavet et eksempel nedenunder der måske hjælper på forståelsen.

Du burde få et par syntaksfejl på den kode:

> $object = $FunnyClass::happyday();

Der skal ikke $ foran klassenavnet.

> public $funnyday = "Monday";
> class FunnyClass{

- og du kan ikke deklarere en public variabel uden for klassen.

Prøv følgende:

class FunnyClass{

public $funnyday = "Monday";

static public function happyday(){
// making allot of fun
return new FunnyClass();
}

}

$object = FunnyClass::happyday();
echo $object->funnyday; // Outputs "Monday"

M.v.h.

Jonathan

--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/

Bertel Lund Hansen (10-09-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 10-09-09 14:35

Jonathan Stein skrev:

> Prøv følgende:

> class FunnyClass{

> public $funnyday = "Monday";

> static public function happyday(){
> // making allot of fun
> return new FunnyClass();
> }

> }

Er det ikke meget indirekte at lave en funktion til at returnere
en ny klasse? Det er da mere oplagt at lade construkoren gøre
det.

class FunnyClass{
public $funnyday = "Monday";
function FunnyClass () {
// making allot of fun
}
}

$object = new FunnyClass();
echo $object->funnyday; // Outputs "Monday"

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Dan Storm (10-09-2009)
Kommentar
Fra : Dan Storm


Dato : 10-09-09 18:32

Bertel Lund Hansen skrev:
> Er det ikke meget indirekte at lave en funktion til at returnere
> en ny klasse? Det er da mere oplagt at lade construkoren gøre
> det.
>
> class FunnyClass{
> public $funnyday = "Monday";
> function FunnyClass () {

Når det nu er vi skal op på niveau, bør man så ikke følge den angivne
standard som PHP 5 introducerede med __construct()?

Udover det kan man jo med fordel anvende både funktioner og klassers
metoder til at instanciere objekter; her tænker jeg blandt andet på
singleton og factory patterns. Særligt i forbindelse med MVC...

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Bertel Lund Hansen (10-09-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 10-09-09 18:47

Dan Storm skrev:

> Når det nu er vi skal op på niveau, bør man så ikke følge den angivne
> standard som PHP 5 introducerede med __construct()?

Jeg ved ikke hvad PHP5 har introduceret, men når jeg slår
__construct op, står der:

   ReflectionClass::__construct — Constructs a ReflectionClass

Det lader til ud fra de tre opslag der vises som "construct", men
omhandler "__construct", at det er en speciel funktion?

> Udover det kan man jo med fordel anvende både funktioner og klassers
> metoder til at instanciere objekter; her tænker jeg blandt andet på
> singleton og factory patterns. Særligt i forbindelse med MVC...

Okay, der er mange ting om klasser jeg ikke ved.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Dan Storm (10-09-2009)
Kommentar
Fra : Dan Storm


Dato : 10-09-09 22:07

Bertel Lund Hansen skrev:
> Dan Storm skrev:
>
>> Når det nu er vi skal op på niveau, bør man så ikke følge den angivne
>> standard som PHP 5 introducerede med __construct()?
>
> Jeg ved ikke hvad PHP5 har introduceret, men når jeg slår
> __construct op, står der:
>
>    ReflectionClass::__construct — Constructs a ReflectionClass
>
> Det lader til ud fra de tre opslag der vises som "construct", men
> omhandler "__construct", at det er en speciel funktion?

__construct() er en funktion som når et objekt instancieres.

Du har fundet dokumentationen for ReflectionClass constructor.
Den dokumentation du bør læse findes her:
<url: http://dk.php.net/manual/en/language.oop5.decon.php>

Forskellen er faktisk ret åbenlys fra PHP4 til PHP5.

PHP4:

class MyClass
{
   var $dbLayer;
   var $errorMessage;

   function MyClass()
   {
      $this->dbLayer = new MySQLAbstract();
      if($this->dbLayer === false)
         $this->errorMessage = "Not connected to MySQL";
   }
}

PHP5:

class MyClass
{
   private $dbLayer;
   public $errorMessage;

   public function __construct()
   {
      $this->dbLayer = new MySQLAbstract();
      if($this->dbLayer === false)
         $this->errorMessage = "Not connected to MySQL";
   }
}


>
>> Udover det kan man jo med fordel anvende både funktioner og klassers
>> metoder til at instanciere objekter; her tænker jeg blandt andet på
>> singleton og factory patterns. Særligt i forbindelse med MVC...
>
> Okay, der er mange ting om klasser jeg ikke ved.
>

Objekt orienteret programmering er også svært at kontrollere - men det
er muligt at lave nogle rigtigt gode webapplikationer med det rette
overblik og god refactoring.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- SÃ¥ vigtig er du heller ikke!

Martin (10-09-2009)
Kommentar
Fra : Martin


Dato : 10-09-09 21:48

Bertel Lund Hansen wrote:
> Jonathan Stein skrev:
>
>> Prøv følgende:
>
>> class FunnyClass{
>
>> public $funnyday = "Monday";
>
>> static public function happyday(){
>> // making allot of fun
>> return new FunnyClass();
>> }
>
>> }
>
> Er det ikke meget indirekte at lave en funktion til at returnere
> en ny klasse? Det er da mere oplagt at lade construkoren gøre
> det.
>
> class FunnyClass{
> public $funnyday = "Monday";
> function FunnyClass () {
> // making allot of fun
> }
> }
>
> $object = new FunnyClass();
> echo $object->funnyday; // Outputs "Monday"
>

Det kaldes singleton <http://en.wikipedia.org/wiki/Singleton_pattern> og
bruges stortset i alle sprog.

final class Singleton
{

protected static $_instance;

protected function __construct() { }

protected function __clone() { }

public static function getInstance()
{
if( self::$_instance === NULL ) {
self::$_instance = new self();
}
return self::$_instance;
}
}

$instance = Singleton::getInstance();

The Singleton pattern applies to situations in which there needs to be a
single instance of a class. The most common example of this is a
database connection. Implementing this pattern allows a programmer to
make this single instance easily accessible by many other objects.

Bertel Lund Hansen (10-09-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 10-09-09 22:01

Martin skrev:

> The Singleton pattern applies to situations in which there needs to be a
> single instance of a class. The most common example of this is a
> database connection. Implementing this pattern allows a programmer to
> make this single instance easily accessible by many other objects.

Tak, det forklarede jo meget fint hvordan det kan være nyttigt.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste