Ankündigung

Einklappen
Keine Ankündigung bisher.

Varialen-Zugriff von Klassen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Varialen-Zugriff von Klassen

    Hallo.

    Ich habe eine Variable, die einen Text enthält. Ich kann auch auf diese Variable zugreifen.

    Jedoch habe ich auch eine Klasse erstellt:
    PHP-Code:
    $Ueberschrift="Hallo Welt";

    class 
    PDF extends FPDF
    {
     function 
    Test()
     {
      echo(
    $Headline);
     }

    Ich merke jedoch, daß in dieser FPDF-Klasse der Zugriff auf die außerhalb dieser Klasse definierten Variablen nicht gelingt. Wie ändere ich dies? Kann jemand ein einfaches Beispiel geben?

  • #2
    entweder übergibst du der Klasse bzw. ihrem Konstruktor/der Methode die Variable oder du greifst per "global" auf sie zu. PHP ist übrigens kein Übersetzungs-Tool, $Headline wird also nicht automatisch auf $Ueberschrift übertragen.

    Kommentar


    • #3
      Ah, ich wollte die Variablennamen verständlicher machen, hatte es aber bei Headline vergessen. beides ist der selbe Name im echten Script.

      Variablen-Übergabe oder global - Hast Du ein ganz simples Beispiel? Mit global bekam ich eine Fehlermeldung, daß global nicht dort erwartet wurde (vor der Variablen).

      Kommentar


      • #4
        Am Vernünftigsten übergibst du die Variable.

        PHP-Code:
        class PDF extends FPDF {
            var 
        $headline;
            function 
        PDF($orientation 'P'$unit 'mm'$format 'A4' ,$headline='') {
                
        $this->FPDF($orientation$unit$format);
                
        $this->headline $headline
            
        }
        // ...
        }
        $headline 'Was_auch_immer';
        $pdf=new PDF('P''mm''A4'$headline); 

        Kommentar


        • #5
          Hmm... Ich glaube, ich verstehe. Werde es mal probieren. Danke. Rückmeldung kommt noch.

          Kommentar


          • #6
            Du musst dir halt im Klaren sein, ob du den Wert in der ganzen Klasse benötigst oder eben nur in dieser einen Funktion.

            Brauchst du sie nur in der Funktion, dann reicht folgendes:

            PHP-Code:
             $Ueberschrift="Hallo Welt";

            class 
            PDF extends FPDF
            {
                function 
            Test($Headline)
                {
                    echo(
            $Headline);
                }

            //...
            $pdf->Test($Ueberschrift); 
            Hoffe völligst verwirrt zu haben

            Kommentar


            • #7
              Nein, klappt nicht. Fehlermeldung:
              Code:
              Warning: Missing argument 1 for PDF::Header(), called in /homepages/2/d15861750/htdocs/North Coast Times/p/PDF/fpdf.php on line 350 and defined in /homepages/2/d15861750/htdocs/North Coast Times/p/PDF.php5 on line 87
              Hier mein Sourcecode:
              PHP-Code:
               $Befehl="select `IDStory`, `Section`, `Headline`, `Author`, `Summary`, `Story`, ".
                       
              "`Photo1`, `Caption1`, `Photo2`, `Caption2`, `Photo3`, `Caption3`, `Photo4`, `Caption4`, `Photo5`, `Caption5` ".
                       
              "from Tabelle ".
                       
              "where `IDStory`=".$_SESSION["IDStory"];
               
              $Anfrage=@mysql_query($Befehl,$Verbindung); 
               
              $Datensatz=@mysql_fetch_assoc($Anfrage);
               
              // --------------------------------------------------------------------------------- PDF
               
               
              require('PDF/fpdf.php');

               class 
              PDF extends FPDF
               
              {
                var 
              $Datensatz;
                var 
              $Banners;

                function 
              Header($Datensatz)
                {
                 
              $this->Datensatz=$Datensatz;
                 
              $this->Image("../v/Deco/LogoPDF.jpg",0,0,215.9);
                 
              $this->SetTextColor(255,255,255);
                 
              $this->SetFont("Arial","B",12);
                 
              $this->Cell(100,10,$Datensatz["Headline"],0,0,"L");
                 
              $this->Ln(25);
                }
                function 
              Footer()
                {
                 
              $this->SetY(-15);
                 
              $this->SetTextColor(255);
                 
              $this->SetFillColor(253,253,250);
                 
              $this->SetFont("Arial","I",8);
                 
              $this->Cell(0,0,"Page ".$this->PageNo()."/{nb}",0,0,"C");         
                }
               }

               
              $pdf=new PDF("P","mm","Legal",$Datensatz$Banners);
               
              $pdf->AliasNbPages();
               
              $pdf->AddPage();
               
              $pdf->SetFont("Arial","",10);
               
              $pdf->Cell(0,10,$MySummary,0,1);
               
              $pdf->Output(); 
              Hilfe!

              Kommentar


              • #8
                Also doch, erfolgreich völligst verwirrt.

                Du musst den Konstruktor überschreiben und dabei den Wert übergeben.

                PHP-Code:
                 class PDF extends FPDF
                {
                  var 
                $Datensatz
                  var 
                $Banners;
                  
                // Hier kommt er, der Konstruktor
                  
                function PDF($orientation 'P'$unit 'mm'$format 'A4' $Datensatz ''
                  {
                     
                $this->FPDF($orientation$unit$format);
                     
                $this->Datensatz $Datensatz;
                  } 
                  
                // $Datensatz übergibst du ja nicht der Methode, ergo Variablenzuweisung weg
                  
                function Header() 
                  {
                   
                // $this->Datensatz=$Datensatz;
                   // wech damit

                   
                $this->Image("../v/Deco/LogoPDF.jpg",0,0,215.9);
                   
                $this->SetTextColor(255,255,255);
                   
                $this->SetFont("Arial","B",12);
                   
                $this->Cell(100,10,$this->Datensatz["Headline"],0,0,"L"); 
                   
                // die in der Klasse gesetzte Variable nutzen.
                   
                $this->Ln(25);
                  }
                  function 
                Footer()
                  {
                   
                $this->SetY(-15);
                   
                $this->SetTextColor(255);
                   
                $this->SetFillColor(253,253,250);
                   
                $this->SetFont("Arial","I",8);
                   
                $this->Cell(0,0,"Page ".$this->PageNo()."/{nb}",0,0,"C");         
                  }
                }

                // Hier war der Fehler, änderst du den Konstruktoraufruf 
                // musst du den auch überschreiben
                $pdf=new PDF("P","mm","Legal",$Datensatz);
                $pdf->AliasNbPages();
                $pdf->AddPage();
                $pdf->SetFont("Arial","",10);
                $pdf->Cell(0,10,$MySummary,0,1);
                $pdf->Output(); 
                Da musst du dich etwas mehr mit Klassen und Objekten beschäftigen.

                http://faq-phpfriend.de/ch/ch-objects.html

                p.s
                $Anfrage=@mysql_query($Befehl,$Verbindung);
                $Datensatz=@mysql_fetch_assoc($Anfrage);
                WOW, soviel Selbstvertrauen über den eigenen Quelltext wollte ich auch mal.

                Kommentar


                • #9
                  Nun, ich bekomme keine Fehlermeldung mehr, doch wird auch die Überschrift nicht gedruckt bzw. die Variable enthält wohl keinerlei Wert (Text). Kann das sein?

                  Ich sitze schon seit Stunden daran, vieleicht sehe ich den Wald vor lauter Bäumen nicht mehr. Hier ist mein Code:
                  PHP-Code:
                   global $Datensatz;
                   
                  $Befehl="select `IDStory`, `Section`, `Headline`, `Author`, `Summary`, `Story`, ".
                           
                  "`Photo1`, `Caption1`, `Photo2`, `Caption2`, `Photo3`, `Caption3`, `Photo4`, `Caption4`, `Photo5`, `Caption5` ".
                           
                  "from Tabelle_Story ".
                           
                  "where `IDStory`=".$_SESSION["IDStory"]; // echo(mysql_error());  echo($Befehl);
                   
                  $Anfrage=@mysql_query($Befehl,$Verbindung); 
                   
                  $Datensatz=@mysql_fetch_assoc($Anfrage);
                   
                  // --------------------------------------------------------------------------------- Banner Ads

                   
                  $Befehl="select `IDBanner`, `Section`, `Banner`, `Company`, `Link` ".
                           
                  "from Tabelle_Banners ".
                           
                  "where `Section`='AllSections' or `Section`='".$MySection."'";
                   
                  $BannerBig="";
                   
                  $Anfrage=@mysql_query($Befehl,$Verbindung); 
                   while(
                  $Banners=@mysql_fetch_assoc($Anfrage))
                   { 
                    if(
                  $Banners["Link"]) 
                    {
                     
                  $Banner[]="<a href=\"".$Banners["Link"]."\" target=\"_blank\">".
                               
                  "<img src=\"".$Banners["Banner"]."\" border=\"0\" width=\"120\" ".
                               
                  "alt=\"".$Banners["Company"]."\" title=\"".$Banners["Company"]."\">".
                               
                  "</a>";
                    }
                    else
                    {
                     
                  $Banner[]="<img src=\"".$Banners["Banner"]."\" border=\"0\" width=\"120\" ".
                               
                  "alt=\"".$Banners["Company"]."\" title=\"".$Banners["Company"]."\">";
                    }
                   }
                   if(
                  $Banner) { shuffle($Banner); }
                   
                  // --------------------------------------------------------------------------------- PDF
                   
                   
                  require('PDF/fpdf.php');

                   class 
                  PDF extends FPDF
                   
                  {
                    var 
                  $Datensatz;
                    var 
                  $Banners;

                    function 
                  PDF($orientation="P",$unit="mm",$format="A4",$Datensatz="")
                    {
                     
                  $this->FPDF($orientation,$unit,$format);
                     
                  $this->Datensatz=$Datensatz;
                    }
                    function 
                  Header()
                    {
                     
                  $this->Datensatz=$Datensatz;
                     
                  $this->Image("../v/Deco/LogoPDF.jpg",0,0,215.9);
                     
                  $this->SetTextColor(255,255,255);
                     
                  $this->SetFont("Arial","B",12);
                     
                  $this->Cell(100,10,$Datensatz["Headline"],0,0,"L");
                     
                  $this->Ln(25);
                    }
                    function 
                  Footer()
                    {
                     
                  $this->SetY(-15);
                     
                  $this->SetTextColor(255);
                     
                  $this->SetFillColor(253,253,250);
                     
                  $this->SetFont("Arial","I",8);
                     
                  $this->Cell(0,0,"Page ".$this->PageNo()."/{nb}",0,0,"C");         
                    }
                   }

                   
                  $pdf=new PDF("P","mm","Legal",$Datensatz,$Banners);
                   
                  $pdf->AliasNbPages();
                   
                  $pdf->AddPage();
                   
                  $pdf->SetFont("Arial","",10);
                   
                  $pdf->Cell(0,10,$MySummary,0,1);
                   
                  $pdf->Output(); 
                  Und davon abgesehen, weißt Du, wie ich bei FPDF einen automatischen Zeilenumbruch hinbekomme?

                  Kommentar


                  • #10
                    Nun, ich bekomme keine Fehlermeldung mehr,
                    Wie auch, wenn du alle unterdrückst.

                    doch wird auch die Überschrift nicht gedruckt bzw. die Variable enthält wohl keinerlei Wert (Text). Kann das sein?
                    Sicher dat

                    Ich sitze schon seit Stunden daran, vieleicht sehe ich den Wald vor lauter Bäumen nicht mehr.
                    Pause?

                    Code:
                    echo(mysql_error());  echo($Befehl);
                    $Anfrage=@mysql_query($Befehl,$Verbindung);
                    $Datensatz=@mysql_fetch_assoc($Anfrage);
                    Äusserst sinnig, vor der Abfrage den Status ausgeben lassen und dann sämtliche Fehlermeldungen zu unterdrücken.

                    Code:
                    function PDF($orientation="P",$unit="mm",$format="A4",$Datensatz="") 
                    $pdf=new PDF("P","mm","Legal",$Datensatz,$Banners);
                    hier fällt die auch nichts auf?

                    Code:
                    function Header()
                      {
                       $this->Datensatz=$Datensatz;
                    Und weil wir so schön dabei sind, überschreiben wir die lokale Variable Datensatz einfach mal mit einen unbestimmten Wert

                    Code:
                    $this->Cell(100,10,$Datensatz["Headline"],0,0,"L");
                    Hätte aber auch nichts ausgemacht, da wir hier ja eh das unbekannte Array $Datensatz nutzen.

                    Und davon abgesehen, weißt Du, wie ich bei FPDF einen automatischen Zeilenumbruch hinbekomme?
                    Ich dachte du hättest dir zumindest dir Doku angesehen.
                    (MultiCell)


                    Versuche erst zu verstehen, wie Klassen funktionieren.
                    Bastel dir ein Testfile ohne jeglichen MySQL oder anderem, taste dich Stück für Stück ran, sonst wird das nix.

                    Kommentar


                    • #11
                      DiBo XXXIII,

                      ja, zugegeben, mit Klassen habe ich mich tatsächlich noch nicht beschäftigt. Ich bin in dieses Klassenproblem hineingerutscht, weil ich FPDF verwenden muß (ein vorgefertigtes Script zum Erstellen von PDFs). Ganz klar, daß ich dadurch sehr hilflos bin. Ich schätze Deine Hilfe sehr, und hoffe, daß ich durch Deine Hilfe ein erstes Verstehen der Lösung bekomme. Bis jetzt habe ich Deine Vorschläge übernommen, aber noch kein gutes Ergebnis erzielt. Ich verstehe es einfach noch nicht.

                      Hier mein Code.

                      PHP-Code:
                      // --------------------------------------------------------------------------------- The selected story

                       
                      global $Datensatz;
                       
                      $Befehl="select `IDStory`, `Section`, `Headline`, `Author`, `Summary`, `Story`, ".
                               
                      "`Photo1`, `Caption1`, `Photo2`, `Caption2`, `Photo3`, `Caption3`, `Photo4`, `Caption4`, `Photo5`, `Caption5` ".
                               
                      "from Tabelle_Story ".
                               
                      "where `IDStory`=".$_SESSION["IDStory"]; 
                       
                      $Anfrage=@mysql_query($Befehl,$Verbindung); 
                       
                      $Datensatz=@mysql_fetch_assoc($Anfrage);  // Datensatz-Array enthält alle Daten!
                       
                      // --------------------------------------------------------------------------------- Banner Ads

                       
                      global $Banners;
                       
                      $Befehl="select `IDBanner`, `Section`, `Banner`, `Company`, `Link` ".
                               
                      "from Tabelle_Banners ".
                               
                      "where `Section`='AllSections' or `Section`='".$MySection."'";
                       
                      $BannerBig="";
                       
                      $Anfrage=@mysql_query($Befehl,$Verbindung); 
                       while(
                      $Banners=@mysql_fetch_assoc($Anfrage)) // Banners-Array enthält alle Daten!
                       

                        if(
                      $Banners["Link"]) 
                        {
                         
                      $Banner[]="<a href=\"".$Banners["Link"]."\" target=\"_blank\">".
                                   
                      "<img src=\"".$Banners["Banner"]."\" border=\"0\" width=\"120\" ".
                                   
                      "alt=\"".$Banners["Company"]."\" title=\"".$Banners["Company"]."\">".
                                   
                      "</a>";
                        }
                        else
                        {
                         
                      $Banner[]="<img src=\"".$Banners["Banner"]."\" border=\"0\" width=\"120\" ".
                                   
                      "alt=\"".$Banners["Company"]."\" title=\"".$Banners["Company"]."\">";
                        }
                       }
                       if(
                      $Banner) { shuffle($Banner); }
                       
                      // --------------------------------------------------------------------------------- PDF
                       
                       
                      require('PDF/fpdf.php');

                       class 
                      PDF extends FPDF
                       
                      {
                        var 
                      $Datensatz// interne Klassen-Variable, richtig?
                        
                      var $Banners// interne Klassen-Variable, richtig?

                        
                      function PDF($orientation="P",$unit="mm",$format="A4",$Datensatz="",$Banners="")
                        {
                         
                      $this->FPDF($orientation,$unit,$format);
                         
                      $this->Datensatz=$Datensatz// Klassen-Variable erhält Wert der globalen Variable?
                         
                      $this->Banners=$Banners// Klassen-Variable erhält Wert der globalen Variable?
                        
                      }

                        function 
                      Header() // THIS-Zuweisung weggenommen
                        
                      {
                         
                      $this->Image("../v/Deco/LogoPDF.jpg",0,0,215.9);
                         
                      $this->SetTextColor(255,255,255);
                         
                      $this->SetFont("Arial","B",12);
                         
                      $this->Cell(100,10,$Datensatz["Headline"],0,0,"L"); //Datensatz ist leer...   :-(
                         
                      $this->Ln(25);
                        }

                        function 
                      Footer()
                        {
                         
                      $this->SetY(-15);
                         
                      $this->SetTextColor(255);
                         
                      $this->SetFillColor(253,253,250);
                         
                      $this->SetFont("Arial","I",8);
                         
                      $this->Cell(0,0,"Page ".$this->PageNo()."/{nb}",0,0,"C");         
                        }
                       }

                       
                      $pdf=new PDF("P","mm","Legal",$Datensatz,$Banners); // Übergabe der globalen Variablen
                       
                      $pdf->AliasNbPages();
                       
                      $pdf->AddPage();
                       
                      $pdf->SetFont("Arial","",10);
                       
                      $pdf->Cell(0,10,$MySummary,0,1);  // Werde mit MultiCell ersetzen, sobald Var-Problem gelöst
                       
                      $pdf->Output(); 

                      Kommentar


                      • #12
                        Ah, neuester Status: ich gebe die Einbeziehung vom PDF-Feature auf. Vielen Dank für alle Hilfe.

                        Kommentar


                        • #13
                          Es wird doch so langsam. Zeieln 1 bis 36 ignoriere ich einfach mal

                          PHP-Code:
                           class PDF extends FPDF
                          {
                            var 
                          $Datensatz// interne Klassen-Variable, richtig?  ja
                            
                          var $Banners// interne Klassen-Variable, richtig?     ja
                            // Beide Variablen sind nun in der Klasse _bekannt_

                            
                          function PDF($orientation="P",$unit="mm",$format="A4",$Datensatz="",$Banners="")
                            {
                             
                          $this->FPDF($orientation,$unit,$format);
                             
                          $this->Datensatz=$Datensatz// Klassen-Variable erhält Wert der globalen Variable?
                             // Nein Klassen-Variable erhält Wert der _übergebenen_ Variable
                             
                          $this->Banners=$Banners// Klassen-Variable erhält Wert der globalen Variable?
                             // Nein Klassen-Variable erhält Wert der _übergebenen_ Variable
                            
                          }

                            function 
                          Header() // THIS-Zuweisung weggenommen
                            // Hier war nie eine THIS-Zuweisung gewesen
                            
                          {
                             
                          $this->Image("../v/Deco/LogoPDF.jpg",0,0,215.9);
                             
                          $this->SetTextColor(255,255,255);
                             
                          $this->SetFont("Arial","B",12);
                             
                          //$this->Cell(100,10,$Datensatz["Headline"],0,0,"L"); //Datensatz ist leer...   Sad
                             // Joh, weil du ja auch auf die _unbekannte_ Variable $Datensatz zugreifst
                             
                          $this->Cell(100,10,$this->Datensatz["Headline"],0,0,"L");
                             
                          // Könnte durchaus zum Erfolg führen  
                             
                          $this->Ln(25);
                            }

                            function 
                          Footer()
                            {
                             
                          $this->SetY(-15);
                             
                          $this->SetTextColor(255);
                             
                          $this->SetFillColor(253,253,250);
                             
                          $this->SetFont("Arial","I",8);
                             
                          $this->Cell(0,0,"Page ".$this->PageNo()."/{nb}",0,0,"C");         
                            }
                          }

                          $pdf=new PDF("P","mm","Legal",$Datensatz,$Banners); // Übergabe der globalen Variablen
                          // Nein, Übergabe der Variablen, global sind diese mitnichten
                          $pdf->AliasNbPages();
                          $pdf->AddPage();
                          $pdf->SetFont("Arial","",10);
                          $pdf->Cell(0,10,$MySummary,0,1);  // Werde mit MultiCell ersetzen, sobald Var-Problem gelöst
                          $pdf->Output(); 
                          Der Weg ist hart

                          Kommentar


                          • #14
                            Zitat von SvenLittkowski
                            Ah, neuester Status: ich gebe die Einbeziehung vom PDF-Feature auf. Vielen Dank für alle Hilfe.
                            Wie, du gibst auf

                            Kommentar

                            Lädt...
                            X