Avatar billede riversen Nybegynder
13. marts 2008 - 14:00 Der er 22 kommentarer og
1 løsning

forklaring ønskes

Kode følger nedenfor men først forklaring.

$quarterid er bare et id, som bruges til opslag i database
$report er et object med forskellige felter
Report::get_report returnerer et object eller null
$quarter er et objekt
get_report_field returnerer 0, hvis $report er null, ellers returnerer den en værdi af en variabel fra $report.

jeg får fejlen: Catchable fatal error: Object of class Report could not be converted to string in C:\Bestillingssystem\www\reporting.php on line 348, som er den sidste linie af det jeg har indsat nedenfor. Hvorfor nu det ?


            $quarterid = $_GET['quarter'];
            $report = Report::get_report( $butikid, $quarterid );
            $quarter;
           
            if( !$report )
                $quarter = Quarter::get_quarter_by_id( $quarterid );
            else
                $quarter = $report->get_quarter();

            $html =
<<<HTML
            <form method="post" name="reportingform">
            <table cellpadding="2" cellspacing="0" border="0" width="100%">
                <tr><td colspan="4">&nbsp;</td></tr>
                <tr>
                    <td width="35%" style="background-color:#000000; color: #FFFFFF; font-size: 18; font-weight:bold;">Resultat</td>
                    <td align="center" width="15%" style="background-color:#000000; color: #FFFFFF; font-size: 14;">{$quarter->get_year()}<br />{$quarter->get_quarter()}. Kvt.</td>
                    <td width="35%" style="background-color:#000000; color: #FFFFFF; font-size: 18; font-weight:bold;">Balance</td>
                    <td align="center" width="15%" style="background-color:#000000; color: #FFFFFF; font-size: 14;">{$quarter->get_year()}<br />{$quarter->get_quarter()}. Kvt.</td>
                </tr>
                <tr>
                    <td><b>Drift, DKK</b></td>
                    <td style="border-right: 1px solid #000000;">&nbsp;</td>
                    <td><b>Aktiver, DKK</b></td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td colspan="2" style="border-right: 1px solid #000000;">&nbsp;</td>
                    <td colspan="2">&nbsp;</td>
                </tr>
                <tr>
                    <td><b>Omsætning i alt</b></td>
                    <td style="border-right: 1px solid #000000;"><input tabindex="1" type="text" name="field1" class="numberfield" style="background-color: #FFFF80;" onChange="java script: CheckNumeric( this );" value="{get_report_field( $report, 1 )}" /></td>
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 14:32 #1
Lav en vardump på resultatet fra  get_report_field( $report, 1 )  og hvad den udskriver. Den vil nok ikke sige, at det er en streng.
Avatar billede riversen Nybegynder
13. marts 2008 - 14:42 #2
nej, det vil den nemlig ikke, som forventet... så hvorfor forsøger "den" at konvertere det til en string i det kald? Det virker fint udenfor <<<HTML blokken
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 14:53 #3
Den konverterer til en streng, fordi det skal bruges som en streng. Og før ca. PHP 5.2 skete der en automatisk konverering (jeg kan ikke huske hvad der kom til at stå). Nu kommer der en fejl. Så:

1) Er du sikker på det skal være et objekt på det sted?
2) Man kan lave en __tostring (er det sådan den hedder?) som vil blive brugt i sådan et til fælde.
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 14:55 #4
Ok: __toString  se  http://se2.php.net/manual/en/language.oop5.magic.php  eksemplet lidt nede på siden.
Avatar billede riversen Nybegynder
13. marts 2008 - 14:57 #5
1) ja, jeg har jo selv lavet det hele, og det fungerer udenfor <<<HTML
2) jeg kan godt prøve at lave det, men min funktion forventer jo et objekt,frem for et tekststrengsrepræsentation af objektet...
Avatar billede riversen Nybegynder
13. marts 2008 - 14:59 #6
hvis jeg laver en __toString forsvinder fejlen, men det er jo ikke helt tanken som sagt.
Avatar billede riversen Nybegynder
13. marts 2008 - 15:00 #7
jeg har før kaldt funktioner på objekter i <<<HTML blokke (og det er jo også gjort andre steder i ovenstående kode), men jeg har dog aldrig før brugt et objekt som parameter også... måske det bare ikke er lovlig kode.
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 15:04 #8
Det er vel ikke brugen af et objekt som parameter, der er problemet, men det der kommer ud af funktionen.
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 15:09 #9
Lille (dumt...) eksempel. Det virker fint med Hent-funktionen, men den her giver din fejl:

<?php


class bumsemand {


  public function hent() {

      return "Bumsen";
  }

  public function f() {
      return new bumsemand();
  }

}


$b = new bumsemand();

$html = <<<CCC
her er {$b->f()}
CCC
;

print $html;

?>
Avatar billede riversen Nybegynder
13. marts 2008 - 15:10 #10
nej, det er brugen af objektet der er problemet...
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 15:13 #11
Tror dig ikke. Nedenfor giver det en fejl, men kalder du o2 i stedet for går det godt. Problemet er alene hvad funktionen afleverer - men vi må jo ikke se din ;)

<?php


class bumsemand {


  public function hent() {

      return "Bumsen";
  }

  public function f() {
      return new bumsemand();
  }

  public function o1($o) {
      return $o;
  }
  public function o2($o) {
      return $o->hent();
  }


}


$b = new bumsemand();

$html = <<<CCC
her er {$b->o1($b)}
CCC
;

print $html;

?>
Avatar billede riversen Nybegynder
13. marts 2008 - 15:17 #12
min funktion returnerer en int... selvom jeg laver det til en string får jeg stadig fejlen
Avatar billede riversen Nybegynder
13. marts 2008 - 15:19 #13
ja, værsgo

    function get_report_field( $report, $field )
    {
        if( !$report )
            return 0;
       
        return  $report->get_field( $field );
    }


og report->get_field ser sådan ud

    public function get_field( $field ){ return $this->fields[$field-1]; }
fields indeholder tal hentet ud fra en db
Avatar billede riversen Nybegynder
13. marts 2008 - 15:21 #14
hvis jeg laver en __toString på report kommer funktionskaldet til at se sådan ud

get_report_field( <returværdi fra tostring>, 1 )
Avatar billede riversen Nybegynder
13. marts 2008 - 15:28 #15
den skriver jo også løst oversat "objekt af klassen report kunne ikke konverteres til en string". Så det har vel næppe noget at gøre med returværdien af get_report_field... men jeg kan selvfølgelig tage fejl :)
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 15:29 #16
Find ud af hvad den udskriver (13/03-2008 14:32:53) - Jeg vil godt vædde en muggen appelsin på, at det ikke er en int ;)
Avatar billede riversen Nybegynder
13. marts 2008 - 15:33 #17
det var det jeg skrev i 15.17.36
Avatar billede riversen Nybegynder
13. marts 2008 - 15:35 #18
behold bare appelsinen ;)... var_dump giver output int(1)... hvis jeg laver det til string skriver den string(1) "1"
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 15:42 #19
Yeps, skylder dig en appelsin. Med eller uden mug - men du må selv hente den ;)

Det er jo fordi .... fanfare .... at du ikke kan kalde globale funtioner i {....}-ere. Du kan kun bruge konstruktionen:  {$.....}, hvor du så til gengæld kan kalde metoder/funtkioner i objekter.

Hvad med at smide det ind i nogle variabler inden din lange HTML-streng?
Avatar billede riversen Nybegynder
13. marts 2008 - 15:47 #20
ja, det er også min sidste udvej, men skulle jo lige være sikker på, det ikke var mig der var helt dum. Har 32 variabler, som jeg (hvis det nu var muligt) helst ville undgå at skulle erklære.

Jeg var ikke klar over det med man ikke kan kalde globale funktioner i {}, så tak for opklaringen. Smid et svar, hvis du vil have point.
Avatar billede riversen Nybegynder
13. marts 2008 - 15:48 #21
jeg laver jo selvf. et array, men alligevel :)
Avatar billede erikjacobsen Ekspert
13. marts 2008 - 15:57 #22
Der er flere måder - en funktion i klassen ville du - bare der er et devalueret $-tegn foran.

Ingen point til mig, tak.
Avatar billede riversen Nybegynder
13. marts 2008 - 17:42 #23
ok...
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