/ 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
Undefined variable på classe
Fra : Jesper Lützen


Dato : 03-12-07 15:14

Hej NG,

Jeg får denne fejlmelding:

Notice: Undefined variable: Book in C:\...\register_book.php on line
56
Fatal error: Call to a member function book_register() on a non-object
in C:\...\register_book.php on line 56

I linie 56 står følgende:
   if($Book->book_register($book_titles_id, $book_id, $register_user_id,
$now))
   echo "<p>OK</p>\n";

Filen book.php er includeret i starten af min fil og består af
følgende:

<?PHP
class Book {
   public $book_titles_id;

   function Book($book_titles_id){
      $this->book_titles_id=$book_titles_id;
   }
   function book_register($book_titles_id, $book_id, $register_user_id,
$registration_time){
      mysql_query("INSERT INTO book_registrations
               SET book_titles_id=$book_titles_id,
                  book_id='$book_id',
                  user_id=$uid,
                  registration_date=$registration_time");
      return true;
   }
}
?>

Og naturligvis er der en logisk forklaring på fejlen, men hvad? Jeg
tror desværre jeg har fået stirret mig blind på det efterhånden...

På forhånd tak

Jesper Lützen

 
 
Peter Brodersen (03-12-2007)
Kommentar
Fra : Peter Brodersen


Dato : 03-12-07 23:54

On Mon, 3 Dec 2007 14:13:50 -0800 (PST), "Jesper Lützen"
<jesperlutzen@gmail.com> wrote:

>Og naturligvis er der en logisk forklaring på fejlen, men hvad? Jeg
>tror desværre jeg har fået stirret mig blind på det efterhånden...

$Book er, som nævnt, en ikke-eksisterende variabel.

Du skal oprette variablen som en instans af klassen, fx:
$Book = new Book;

Alternativt skal du kalde metoden statisk:
if (Book::book_register(...))
... men det giver ikke nødvendigvis det resultat efterfølgende, som du
ønsker.

--
- Peter Brodersen
Kendt fra Internet

Jesper Lützen (04-12-2007)
Kommentar
Fra : Jesper Lützen


Dato : 04-12-07 01:02

On 3 Dec., 23:54, Peter Brodersen <usenet2...@ter.dk> wrote:
> $Book er, som nævnt, en ikke-eksisterende variabel.
>
> Du skal oprette variablen som en instans af klassen, fx:
> $Book = new Book;

Naturligvis! En ting er at finde en fejl i noget der ER lavet, en
anden er at finde noget der IKKE er lavet.

Tak for hjælpen!

Venlig hilsen

Jesper Lützen

Martin (04-12-2007)
Kommentar
Fra : Martin


Dato : 04-12-07 10:57

Jesper Lützen wrote:
> Hej NG,
>
> Jeg får denne fejlmelding:
>
> Notice: Undefined variable: Book in C:\...\register_book.php on line
> 56
> Fatal error: Call to a member function book_register() on a non-object
> in C:\...\register_book.php on line 56
>
> I linie 56 står følgende:
>    if($Book->book_register($book_titles_id, $book_id, $register_user_id,
> $now))
>    echo "<p>OK</p>\n";

Husk at initialiserer dit objekt med
$Book = new Book($id);
$Book->book_register($book_id,$register_user,$reg_time);

>
> Filen book.php er includeret i starten af min fil og består af
> følgende:
>
> <?PHP
> class Book {
>    public $book_titles_id;
>
>    function Book($book_titles_id){
>       $this->book_titles_id=$book_titles_id;
>    }

Psst... i PHP 5 (som du bruger kan jeg se) der hedder en konstruktør

public function __construct($book_titles_id) {
- bare lige til en anden gang

>    function book_register($book_titles_id, $book_id, $register_user_id,
> $registration_time){
>       mysql_query("INSERT INTO book_registrations
>                SET book_titles_id=$book_titles_id,
>                   book_id='$book_id',
>                   user_id=$uid,
>                   registration_date=$registration_time");
>       return true;
>    }
> }

Hvorfor sætter du endnu engang $book_titles_id (den bliver jo sat i den
konstruktør)

public function book_register($book_id, $register_user_id, $reg_time) {
....
SET book_titles_id=$this->book_titles_id,
....
}


> ?>
>
> Og naturligvis er der en logisk forklaring på fejlen, men hvad? Jeg
> tror desværre jeg har fået stirret mig blind på det efterhånden...
>
> På forhånd tak
>
> Jesper Lützen

Jesper Lützen (04-12-2007)
Kommentar
Fra : Jesper Lützen


Dato : 04-12-07 04:46

On 4 Dec., 10:57, Martin <ma...@SPAMscandesigns.dk> wrote:
> Psst... i PHP 5 (som du bruger kan jeg se) der hedder en konstruktør

Ok navngivningen af de forskellige ting er ikke noget jeg har lagt
forfærdeligt meget vægt på, men tak. Ja, jeg har PHP5 på min
udviklingsmaskine, men den produktionsserver, som denne skal op og
køre på er med en ældre version af PHP, så der er jeg naturligvis også
nødt til løbende at være opmærksom på.

> public function __construct($book_titles_id) {
> - bare lige til en anden gang
>
> > function book_register($book_titles_id, $book_id, $register_user_id,
> > $registration_time){
> > mysql_query("INSERT INTO book_registrations
> > SET book_titles_id=$book_titles_id,
> > book_id='$book_id',
> > user_id=$uid,
> > registration_date=$registration_time");
> > return true;
> > }
> > }
>
> Hvorfor sætter du endnu engang $book_titles_id (den bliver jo sat i den
> konstruktør)

Givetvis fordi jeg ikke ved bedre ;) At arbejde med klasser,
konstruktører mv. er relativt nyt for mig, og tingene skal jo lige
læres ;)


Tak for dit input.

Venlig hilsen

Jesper Lützen

Martin (04-12-2007)
Kommentar
Fra : Martin


Dato : 04-12-07 14:09

Jesper Lützen wrote:
> On 4 Dec., 10:57, Martin <ma...@SPAMscandesigns.dk> wrote:
>> Psst... i PHP 5 (som du bruger kan jeg se) der hedder en konstruktør
>
> Ok navngivningen af de forskellige ting er ikke noget jeg har lagt
> forfærdeligt meget vægt på, men tak. Ja, jeg har PHP5 på min
> udviklingsmaskine, men den produktionsserver, som denne skal op og
> køre på er med en ældre version af PHP, så der er jeg naturligvis også
> nødt til løbende at være opmærksom på.

Hvis det skal op og køre på alt under PHP 5 - så kan du starte med
fjerne alle public.

Dvs. navnet ikke må være

public function ...
men bare
function

og oppe i toppen ved variablerne
public $...
skal være
var $...

Ellers så får du en dejlig fejlmeddelse i PHP 4.
(men hvem kører efterhånden med PHP 4 mere? - Supporten og opdateringer
er stoppet med at blive udgivet til PHP 4 - så alle sikkerheds fejl i
PHP 4 - er "bare ærgeligt")

>> Hvorfor sætter du endnu engang $book_titles_id (den bliver jo sat i den
>> konstruktør)
>
> Givetvis fordi jeg ikke ved bedre ;) At arbejde med klasser,
> konstruktører mv. er relativt nyt for mig, og tingene skal jo lige
> læres ;)

Nemlig - ellers ville det da være kedeligt :)

> Tak for dit input.

Det var da så lidt :)

N/A (04-12-2007)
Kommentar
Fra : N/A


Dato : 04-12-07 14:09



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

Månedens bedste
Årets bedste
Sidste års bedste