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