Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Konstante in Klasse (https://www.delphipraxis.net/136754-%5Bphp%5D-konstante-klasse.html)

Luckie 7. Jul 2009 13:20


[PHP] Konstante in Klasse
 
Ich habe hier eine PHP-Klasse mit einer Konstanten:
Code:
class CreatePDF
{
    const CORRECTION_FACTOR_MAXCELLROWS = 1.60; // just a workaround
Wenn ich selbige aber benutzen will, sagt er mir, dass er sie nicht kennen würde:
Code:
    private function getMaxTextLinesForRow($i, $trans)
    {       
        return max(
            $this->pdf->getNumLines((string)$i+1, $this->colWidths[0]),
            $this->pdf->getNumLines($trans['Position'][(string)$i]['title'], $this->colWidths[1]),
            $this->pdf->getNumLines($trans['Position'][(string)$i]['description'], $this->colWidths[2]),
            $this->pdf->getNumLines($trans['Position'][(string)$i]['net_price'], $this->colWidths[3]),
            $this->pdf->getNumLines($trans['Position'][(string)$i]['amount'], $this->colWidths[4]),
            $this->pdf->getNumLines($trans['Position'][(string)$i]['amount']*$trans['Position'][(string)$i]['net_price'], $this->colWidths[5]),
            $this->pdf->getNumLines($trans['Position'][(string)$i]['tax_type'], $this->colWidths[6]),
            $this->pdf->getNumLines((1-$trans['Position'][(string)$i]['tax_type']/100)*$trans['Position'][(string)$i]['amount']*$trans['Position'][(string)$i]['net_price'], $this->colWidths[7])
            ) * $this->CORRECTION_FACTOR_MAXCELLROWS;
    }
Zitat:

Undefined property: CreatePDF::$CORRECTION_FACTOR_MAXCELLROWS [APP\views\transactions\createpdf.php, line 154]
Aber laut einem PHP Tutorial werden in Klassen Konstanten mit const deklariert und nicht mit define.

Gollum 7. Jul 2009 13:28

Re: [PHP] Konstante in Klasse
 
Hallo,

so sollte es funktionieren:


self::CORRECTION_FACTOR_MAXCELLROWS

Mithrandir 7. Jul 2009 13:28

Re: [PHP] Konstante in Klasse
 
Imho müsste es doch
Code:
CreatePDF::CORRECTION_FACTOR_MAXCELLROWS
heißen und nicht
Code:
$this->CORRECTION_FACTOR_MAXCELLROWS
, oder?

Luckie 7. Jul 2009 13:52

Re: [PHP] Konstante in Klasse
 
Hm, das wäre aber komisch. Auf Variablen und Methoden der Klasse kann ich mit
Code:
$this->...
zugreifen. Ich probiere es mal.

Die Muhkuh 7. Jul 2009 14:02

Re: [PHP] Konstante in Klasse
 
Auf Konstanten greifst Du, wie die anderen schon erwähnt haben, mit self:: bzw. Klassenname:: zu.

Du hast auch Zugriff auf die Konstanten, wenn die Klasse nicht instantiiert ist.

Luckie 7. Jul 2009 14:17

Re: [PHP] Konstante in Klasse
 
A-ha. Also ist das bei Konstanten anders als bei Variablen und Methoden? Wie krank ist das denn? :wall:

Daniel 7. Jul 2009 14:25

Re: [PHP] Konstante in Klasse
 
Ist es nicht so, dass $this-> auf die aktuelle Instanz der Klasse geht? Wenn Du hingegen auf die Klassenkonstante zugreifen willst, dann bewegst Du Dich aus Sicht von PHP außerhalb der aktuellen Instanz - somit ist die andere Notation korrekt. (Es ist syntaktisch das Gleiche, wenn Du in PHP auf Klassenmthoden zugreifen möchtest.)

Luckie 7. Jul 2009 14:30

Re: [PHP] Konstante in Klasse
 
Aber die Konstante soll eigentlich keine Klassen-Konstante seion, sondern eine ganz einfache private Konstante innerhalb der Klasse, die auch nur dort gültig ist.

PS: Ich kann das ganze im Moment gerade nicht testen, der DB-Server bei uns spinnt und scheint down zu sein.

Daniel 7. Jul 2009 14:36

Re: [PHP] Konstante in Klasse
 
Zitat:

Zitat von Luckie
Aber die Konstante soll eigentlich keine Klassen-Konstante seion, sondern eine ganz einfache private Konstante innerhalb der Klasse, die auch nur dort gültig ist.

Wenn Du PHP ... :gruebel: 5 hast, dann setze ein "private" davor und Du hättest wenigstens das mit der Sichtbarkeit geklärt. Die restliche Syntax müsste ich gleich mal nachschlagen.

Luckie 7. Jul 2009 15:21

Re: [PHP] Konstante in Klasse
 
Also mit
Code:
self::...
geht es. Aber setze ich ein private davor
Code:
private const CORRECTION_FACTOR_MAXCELLROWS = 1.60; // just a workaround
meint er:
Zitat:

Parse error: parse error, expecting `T_VARIABLE' in C:\Programme\xampp\htdocs\psi.iogroup.net\public_h tml\app\views\transactions\createpdf.php on line 20
(Zeile 20 ist die obige Zeile.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz