[PHP] klasse doet moeilijk.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
Ik heb de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
...
class Tijd 
    {
        //vars
        private $begin;

        //constructor
        function Tijd() 
        {
            self::$begin = microtime(true);
        }
    }
...


Nu doe ik het volgende:
PHP:
1
$tijd = new Tijd();


En PHP stuurt deze error uit :(
code:
1
Fatal error: Access to undeclared static property: Tijd::$begin in E:\Website\inc\time.inc.php on line 10
(even het lijnnummer aangepast om overeen te komen met dit topique.)

Natuurlijk kan ik dit oplossen met dat property static te maken.

MAAR, mijn kennis van klassen leert mij dit:

Ik maak een nieuw object, 'tijd' genaamd, en die heeft eigen variablen (hoe noemen ze in een klasse?). Dus $tijd heeft zijn eigen $begin. Waarom moet die dan static zijn?

Ik draai Apache 2.2 met PHP 5.2.1

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 12:37

Zoefff

❤ 

Anders maak je er van:

PHP:
1
     private var $begin;

Denk dat 'ie dat al een stuk leuker vind :P


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
Zoefff schreef op woensdag 28 februari 2007 @ 21:56:
Anders maak je er van:

PHP:
1
     private var $begin;

Denk dat 'ie dat al een stuk leuker vind :P
code:
1
Parse error: syntax error, unexpected T_VAR, expecting T_VARIABLE in E:\Website\inc\time.inc.php on line 6

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
...
class Tijd 
    {
        //vars
        private var $begin; 

        //constructor
        function Tijd() 
        {
            self::$begin = microtime(true);
        }
    }
...
?>


Is var niet van JS oid?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Nu online

orf

waarom niet gewoon $this->begin = microtime(true);

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Nee, var wordt alleen gebruikt in PHP 4. In PHP 5 levert het bij los gebruik E_STRICT meldingen op, omdat het deprecated is. Bij fout gebruik is het gewoon een E_ERROR, net als nu bij jou.
orf schreef op woensdag 28 februari 2007 @ 22:00:
waarom niet gewoon $this->begin = microtime(true);
Is ook deprecated.
Ho, mijn excuses, ik ben even in de war. :P Je gebruikt :: alleen als het om een static variabele gaat, dat is hier niet het geval, omdat het hier om een private variabele gaat in de huidige instantie.

[ Voor 53% gewijzigd door --MeAngry-- op 28-02-2007 22:07 ]

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
self::$begin = microtime(true);


PHP:
1
$this -> begin = microtime(true);


Verder werk je in PHP5 en is het mooier om met een __construct function te werken. Deze wordt aangeroepen op het moment dat het object aangemaakt wordt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
...
class Tijd 
    {
        //vars
        private $begin; 

        //constructor
        function __construct() 
        {
            $this -> begin = microtime(true);
        }
    }
...
?>

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
Verwijderd schreef op woensdag 28 februari 2007 @ 22:02:
PHP:
1
self::$begin = microtime(true);
Dat werkt niet.
PHP:
1
$this -> begin = microtime(true);
Dit is deprecated, liever niet.
Verder werk je in PHP5 en is het mooier om met een __construct function te werken. Deze wordt aangeroepen op het moment dat het object aangemaakt wordt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
...
class Tijd 
    {
        //vars
        private $begin; 

        //constructor
        function __construct() 
        {
            $this -> begin = microtime(true);
        }
    }
...
?>
Dit werkt goed, maar moet ik via die $this?

Overigens: ERROR_REPORTING staat op E_ALL

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • FlorisB
  • Registratie: Augustus 2004
  • Laatst online: 09:56
Je kunt een var van een class niet static aanroepen als hij niet static is.

Er zijn maar 2 mogelijkheden (even simpelgezegd ;) ):

1) Je class is static en roept dus ook alles static aan, dit dus met classnaam::$var of self::$var in de class zelf
2) Je class is een standaard object, en roept het eigen object aan met $this->var of $classe->var buiten de classe.

Als ik jou was zou ik even het verschil doornemen tussen static classes en 'normale' classes/vars

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
FlorisB schreef op woensdag 28 februari 2007 @ 22:07:
Je kunt een var van een class niet static aanroepen als hij niet static is.

Er zijn maar 2 mogelijkheden (even simpelgezegd ;) ):

1) Je class is static en roept dus ook alles static aan, dit dus met classnaam::$var of self::$var in de class zelf
2) Je class is een standaard object, en roept het eigen object aan met $this->var of $classe->var buiten de classe.

Als ik jou was zou ik even het verschil doornemen tussen static classes en 'normale' classes/vars
Het verschil ken ik wel hoor :)

Ik dacht alleen dat $this niet meer gebruikt werd.

Excuses.

Iig allemaal bedankt, ik heb weer wat bijgeleerd ;) _/-\o_

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

En als je een static wilt gebruiken in php5; gewoon declareren als 'static $varname' (eventueel met private, public of protected). Alleen je PHP 4 compatibility is daarmee volkomen om zeep geholpen.

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
<?php
$this -> begin = microtime(true);
?>

Leg mij eens uit wat daar deprecated aan is ?


Dit werkt prima, PHP5 only:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
...
class Tijd {
        //vars
        private $begin;

        //constructor
        public function __construct() {
            $this->begin = microtime(true);
        }

        public function getBegin() {
                return $this->begin;
        }
}

$myTime = new Tijd();
$myTime->getBegin();

?>

[ Voor 77% gewijzigd door Verwijderd op 02-03-2007 16:39 . Reden: pehape tagjes toegevoegd ]


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 19:50

Gonadan

Admin Beeld & Geluid, Harde Waren
Verwijderd schreef op vrijdag 02 maart 2007 @ 16:33:
<?php
$this -> begin = microtime(true);
?>

Leg mij eens uit wat daar deprecated aan is ?
Daar is helemaal niets deprecated aan.
Met -> roep je in object context de 'kinders' van het object aan.
Met :: roep je in static/klasse context de kinders aan. Dat kan dus alleen met constanten en functies.

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens Snakiej wel, dus daar ben ik benieuwd naar.

Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 19:50

Gonadan

Admin Beeld & Geluid, Harde Waren
Verwijderd schreef op vrijdag 02 maart 2007 @ 16:40:
Volgens Snakiej wel, dus daar ben ik benieuwd naar.
Dat heeft hij al gecorrigeerd in een latere post hoor. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

ups, overheen gelezen. Snakiej wil je die post aanpassen, dit kan voor misverstanden zorgen >_<
Pagina: 1