Avatar billede lakana Nybegynder
09. juli 2008 - 23:13 Der er 14 kommentarer og
1 løsning

Klasse, der ikke er oprettet variabel til

Er der nogle, der ved hvorfor følgende script ikke virker som det ville gøre hvis jeg oprettede et objekt til det (altså "$var = new Test;", og så brugte "$this" istedet for "self::")?
Den gemmer slet ikke noget i $mysqli.

class Test
{
    public static $mysqli;
   
    public function __construct() {
        self::$mysqli = new MySQLi(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME );
    }
}
Avatar billede dkfire Nybegynder
10. juli 2008 - 00:08 #1
Lidt ligsom $this så skal der ikke $ ved mydqli, dvs :
self::mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME );

husk også at for en funktionsnavn så er der forskel på store og små bogstaver.
Avatar billede lakana Nybegynder
10. juli 2008 - 01:06 #2
Jo der skal da, og "new MySQLi()" er da lige så gyldigt som "new mysqli()"?
Avatar billede lakana Nybegynder
10. juli 2008 - 01:07 #3
http://dk2.php.net/manual/en/class.mysqli.php

Og på den side står klassenavnet som MySQLi :-)
Avatar billede arne_v Ekspert
10. juli 2008 - 01:40 #4
Jeg troede at funktion og klasse navne var case insensitive mens at variable var
case sensitive !?!?
Avatar billede dkfire Nybegynder
10. juli 2008 - 10:46 #5
Kan godt være jeg har byttet om på funktioner og variabler.
Men jeg har ret med hensyn til at der ikke skal være en $ mellem mysqli og self:

self::mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME );
Avatar billede lakana Nybegynder
10. juli 2008 - 11:42 #6
dkfire: det tror jeg heller ikke du har ret i. (http://dk2.php.net/manual/en/language.oop5.paamayim-nekudotayim.php)
Avatar billede lakana Nybegynder
10. juli 2008 - 14:12 #7
Det ser ud til, at når man skriver

Klassenavn::metodeNavn(), så tilgår den ikke __construct(), men KUN funktionen :-( Hvordan kan det dog være? Og hvad kan man gøre for at løse det?
Avatar billede arne_v Ekspert
11. juli 2008 - 00:10 #8
Hvorfor skulle Klassenavn::metodeNavn() kalde __construct() ??

__construct() kaldes vel når du laver en new !
Avatar billede lakana Nybegynder
11. juli 2008 - 10:54 #9
arne_v: ja jeg havde vel bare misforstået det :D jeg troede, at altid når man kaldte en funktion i en klasse, så gik den forbi __construct(). Har du så en idé til hvordan jeg kan gøre det? :-/
Avatar billede arne_v Ekspert
12. juli 2008 - 03:19 #10
Gøre hvad ?
Avatar billede lakana Nybegynder
12. juli 2008 - 12:27 #11
Mine klasser ser ud som nedenfor, men det kan de jo ikke når jeg ikke laver en ny instans af klassen?

class Klassenavn {
    private $mysqli;

    public function __construct() {
        $this->mysqli = new MySQLi(...);
    }

    public function delete($id) {
        $this->mysqli->query(...);
    }
}
Avatar billede arne_v Ekspert
12. juli 2008 - 16:24 #12
$noget = new Klassenavn();
$noget->delete(177);
Avatar billede arne_v Ekspert
27. juli 2008 - 22:45 #13
lakana ?
Avatar billede wanze Nybegynder
29. juli 2008 - 18:23 #14
Du burde måske læse op på, hvad det faktisk vil sige, at tilgå funktioner med ::.

Nej, construtoren bliver naturligvis ikke kørt, fordi du ikke initialiserer en klasse. Hvis du vil have construturen til at køre, så må du istedet oprette en instance via new-nøgleordet.

self::$myqsli vil ikke fungere, da den så ikke vil tro, at du definerer en variabel, men nærmere søger dens værdi. Det vil sige, at hvis du fx bruger koden:

$mysqli = "hest";
self::$mysqli;

så vil PHP forsøge at køre funktionen self::hest.
Avatar billede lakana Nybegynder
07. august 2011 - 20:35 #15
jeg var ikke interesseret i at køre en ny instans af klassen, og derfor i tvivl om der var eventuelle måder at gøre det på.

et svar
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