Avatar billede electrobeat_dk Nybegynder
24. marts 2007 - 14:44 Der er 17 kommentarer og
1 løsning

global variabel i class

jeg har en class hvor jeg skal bruge en variabel udefra.. jeg har forsøgt med global og public, men uden held..

er stadig ikke helt med på hvordan man hånterer de variabler i forhold til en class

bruger forresten php5
Avatar billede windcape Praktikant
24. marts 2007 - 14:52 #1
global variable er FY FY!! du bør for alt i verden undgå at bruge dem.

Hvis du kan poste din kode, kan vi sikkert skrive et ordenlig alternativ, som ikke bruger fjollede globals.
Avatar billede electrobeat_dk Nybegynder
24. marts 2007 - 15:05 #2
ja, det ved jeg, men i lige det her tilfælde og for at lave det mest dynamisk vil det virke bedst

min kode fylder 400 linjer

kan du ikke bare sige mig hvordan jeg gør? :)
Avatar billede windcape Praktikant
24. marts 2007 - 15:08 #3
ja, det ved jeg, men i lige det her tilfælde og for at lave det mest dynamisk vil det virke bedst

-- Netop derfor skal du IKKE bruge globals

min kode fylder 400 linjer

-- Og hvad så ? post den, eventuelt på www.phpfi.com , så der kommer highlight på (husk at poste linket)

kan du ikke bare sige mig hvordan jeg gør? :)

-- nej, fordi at jeg ikke ved hvad du rent faktisk vil lave. Og gentager lige mig selv igen, GLOBALS ARE EVIL
Avatar billede electrobeat_dk Nybegynder
24. marts 2007 - 15:14 #4
$VAR = 'noget';

class min_class
{
    function min_class($VAR)
    {
        // noget
    }
}

$cls = new min_class();

echo $cls;
Avatar billede windcape Praktikant
24. marts 2007 - 15:18 #5
PHP5
<?php

$name = 'Windcape';

class Person
{
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public fuction __toString() {
        return $this->name;
    }
}

$person = new Person($name);
echo $person;

?>

PHP4
<?php

$name = 'Windcape';

class Person
{
    var $name;

    function Person($name) {
        $this->name = $name;
    }
}

$person = new Person($name);
echo $person->name;

?>
Avatar billede windcape Praktikant
24. marts 2007 - 15:19 #6
Du skal simpelhen bare indsætte dine variable i konstruktoren når du initializere objektet.
Avatar billede dkfire Nybegynder
24. marts 2007 - 15:20 #7
din echo $cls vil ikke give noget godt, da det er en class.
Lav hellere en funtion i din class ala:
function getVar()
{
return $this->var;
}

så kan du gøre:
echo $cls->getVar();

Ved godt at php5 har en standart function til at hente public variabler fra en class.
Avatar billede windcape Praktikant
24. marts 2007 - 15:20 #8
__toString:
http://dk2.php.net/manual/da/language.oop5.magic.php

OOP i PHP5
www.php.net/oop5

OOP i PHP4
www.php.net/oop

Vil anbefale at læse det hele igennem, da du ikke lader til at have forstået konceptet med OOP.

Derudover kig nærmere på stdClass (php5 only).

<?php

$person = new StdClass();
$person->name = 'Windcape';

echo $person->name;

?>
Avatar billede windcape Praktikant
24. marts 2007 - 15:21 #9
dkfire, ja det er __get()

<?php

$name = 'Windcape';

class Person
{
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function __get($property) {
        return $this->$property;
    }
}

$person = new Person($name);
echo $person->name;

?>
Avatar billede windcape Praktikant
24. marts 2007 - 15:29 #10
Og hvis du skal bruge en statisk klasse til at mappe værdier eller et array, har jeg en liggende her.

http://www.dragons-lair.org/module/repository/PHP/Utils/Config.php
Avatar billede electrobeat_dk Nybegynder
25. marts 2007 - 20:42 #11
jeg læser lige lidt på det :)
Avatar billede electrobeat_dk Nybegynder
26. marts 2007 - 20:26 #12
jeg må sige jeg er lidt lost

er stadig ikke helt klar over hvad forskellen er på private og public?
Avatar billede dkfire Nybegynder
26. marts 2007 - 20:38 #13
Det er forholdsvis let.

Private -> så er det kun muligt for klassen selv at behandle de elementer som er private, de er privat for klassen

Public -> så har du mulighed for at behandle dem uden for klassen.

Kort eks.

class test{

public var $variable1;
private var $variable2;

public function testafvar()
{
echo "noget";
}

private function test2afvar()
{
echo "noget andet";
}

// For at hente en private variable skal du lave en public function som retunere den
public function hentvar()
{
return $this->variable2;
}

}

$myclass = new test();

// Brug af klassens variabler
echo $myclass->variable1; //Det her kan lade sig gøre
echo $myclass->variable2; //Det her kan IKKE lade sig gøre, lukket land.
// for at printe variable2 ud, bruges den public function
echo $myclass->hentvar();

// Brug af functioner
$myclass->testafvar();  // Kan godt lade sig gøre.
$myclass->test2afvar(); // Kan ikke lade sig gøre.

Håber det hjalp lidt
Avatar billede electrobeat_dk Nybegynder
26. marts 2007 - 20:48 #14
dkfire > jo, men det var også sådan jeg mente at forstå det..

jeg blev bare lidt forvirret da windcape satte variablen "udenfor" klassen til private
Avatar billede windcape Praktikant
27. marts 2007 - 05:32 #15
det skal så siges at 'var' svarer til 'public' i php4, og er det eneste mulighe.d
'var' er forældet i php5, og istedet benyttes public/private/protected

public var $variable1;
private var $variable2;

er IKKE legal syntax.

Hvis du er i tvivl, kan du altid bare benytte public. 'var' skal benyttes i php4, og er som sagt, eneste mulighed.

--

Tilbage til spørgsmålet: Du har stadig ikke givet udtryk for hvad du rent faktisk ønsker.. Kunne være du skulle få postet din kode, hvis du vil have andet en rene teoretiske forklaringer.
Avatar billede electrobeat_dk Nybegynder
27. marts 2007 - 16:02 #16
windcape >

jeg tror faktisk mest af alt jeg gik efter det teoretiske, for at få helt afklaring på det.. er som sagt lige startet på php5, og har aldrig anvendt oop før nu

jeg havde heller ikke lige troet at svaret ville trække sådan ud, men hvem af jer vil have 5 points? :)
Avatar billede electrobeat_dk Nybegynder
28. marts 2007 - 20:24 #17
ingen af jer der vil lave et svar?

I skal selvfølgelig begge have tak for hjælpen :)
Avatar billede electrobeat_dk Nybegynder
31. marts 2007 - 12:51 #18
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester