Avatar billede palito Nybegynder
07. maj 2006 - 15:45 Der er 17 kommentarer og
1 løsning

Fil kender ikke til variabel der er lavet andetsteds

Burde dette ikke virke?

--
minFunktion.php:
<?php
function loadKlasse($klasse)
{
include($klasse);
$minKlasse = new Test;
}
?>

index.php:
<?php
include("minFunktion.php");

loadKlasse("class.test.php");

echo $minKlasse->testFunktion();
?>
--


Hvorfor kender min index-fil ikke den til variabel jeg lige har lavet?
Avatar billede erikjacobsen Ekspert
07. maj 2006 - 15:50 #1
function loadKlasse($klasse)
{
global $minKlasse;
include($klasse);
$minKlasse = new Test;
}
?>
Avatar billede palito Nybegynder
07. maj 2006 - 15:59 #2
hvad hvis nu den så således ud:

function loadKlasse($klasse)
{
include($klasse);
${$klasse} = new Test;
}
Avatar billede erikjacobsen Ekspert
07. maj 2006 - 16:00 #3
Det vil kun give dig bøvl ;)  Hvad vil du fx. opnå?
Avatar billede palito Nybegynder
07. maj 2006 - 16:05 #4
At jeg har klasserne angivet automatisk på forhånd istedet for at sidde og skrive dem manuelt
Avatar billede erikjacobsen Ekspert
07. maj 2006 - 16:11 #5
Ja, det lyder da som en idé  -  en dårlig idé. Nu henter du en klasse, men instantierer et objekt, først kaldet $minKlasse - ret beset et dårligt navn, da det ikke er en klasse. Og du vil aldrig have mere end eet objekt fra en given klasse? Det bliver i hvert fald bøvlet. Men når du nu putter det ind i en funktion, så lad funktionen returnere objektet, og giv det et navn, der hvor du kalder den.
Tag også et smut fordi http://php.net/include_once
Avatar billede palito Nybegynder
07. maj 2006 - 16:29 #6
Kan du forklaremig PHP5's nye funktion __autoload().. Kan den ikke gøre det jeg søger?
Avatar billede erikjacobsen Ekspert
07. maj 2006 - 17:02 #7
Ja, og så skal du sige 'new' udenfor. Det næste problem med generiske klasser i din loadKlasse bliver nemlig hvad du skal sige new til.
Avatar billede palito Nybegynder
08. maj 2006 - 09:07 #8
Det har jeg klaret, jeg ville bare gerne have at funktionen automatisk skulle finde klasse-filerne istedet for at jeg skal køre dem således: loadKlasse("mysql_database") osv.

<?php
function loadClass($klasse_navn) {
    global ${$klasse_navn};
   
    require_once($_SERVER['DOCUMENT_ROOT'] . "/class." . $klasse_navn . ".php");
   
    ${$klasse_navn} = new $klasse_navn;
}
?>
Avatar billede palito Nybegynder
08. maj 2006 - 09:07 #9
og så tænkte jeg at __autoload kuunne det
Avatar billede erikjacobsen Ekspert
08. maj 2006 - 09:11 #10
Jeg synes ikke du skal gøre andet end det __autoload giver dig. Det du forsøger at lave forhindrer dig i at lave to ens objekter fra samme klasse, men med forskellige navne.
Avatar billede palito Nybegynder
08. maj 2006 - 18:44 #11
kan du så ikke  lave mig en hurtig index-side som gør brug af __autoload() for jeg kan ik få det til at virke
Avatar billede erikjacobsen Ekspert
08. maj 2006 - 19:18 #12
Det står vel alt sammen på http://php.net/__autoload - hvis det ikke virker, så vis os hvad du gør.
Avatar billede palito Nybegynder
10. maj 2006 - 22:33 #13
Burde det her ikke skrive alle klassenavne?

<?php
function __autoload($class_name) {
    echo $class_name;
}
?>
Avatar billede olebole Juniormester
10. maj 2006 - 22:36 #14
<ole>

Nej, det udskriver fil-navnet  :)

/mvh
</bole>
Avatar billede palito Nybegynder
10. maj 2006 - 22:45 #15
har lavet. læg svar erikjacobsen.. kan du forklare ulempen ved min egen funktion igen?
Avatar billede erikjacobsen Ekspert
10. maj 2006 - 22:46 #16
Den udskriver navnene på de klasser, som du siger new til, som ikke kendes. Men da den ikke definerer klasserne, vha include, sker der ikke yderligere. Ud over en fatal fejl over ikke at kunne oprette et objekt.

Hvad er det du prøver på?

(Ole: Parameternavnet til __autoload har intet direkte at gøre med filnavnet på den filnavnet på den fil hvor klassen defineres)
Avatar billede erikjacobsen Ekspert
10. maj 2006 - 22:47 #17
Jeg samler slet ikke på point, tak.
Jeg har allerede forklaret det - hvad er det du ikke forstår?
Avatar billede palito Nybegynder
11. maj 2006 - 08:49 #18
i orden :D

ja det er
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