2010-12-07 5 views
3

Hier ist ein minimaler Testfall I isoliert habe:PHP Klasse Property Mit range()

<?php 

class What { 
    public $foo = range(0,5); 
} 

?> 

Ich habe keine Ahnung, warum dies ein Fehler auftritt:

PHP Parse error: syntax error, unexpected '(', expecting ',' or ';' in TestCase.php on line 4

Mit array() funktioniert.

Verwenden von PHP 5.3.3 (im Lieferumfang von OS X).

+3

Ihr Kommentar, dass „viele andere Funktionen arbeiten“ nicht richtig sein kann. – Matthew

+0

@konforce Die Moral der Geschichte ist, fragen Sie nicht Stapelüberlauf Fragen super spät in der Nacht. D: – Karew

Antwort

5

Sie können in diesem Kontext nur konstante Werte zuweisen. Sie müssen Ihre $foo in einem Konstruktor initialisieren, wenn Sie den Rückgabewert einer Funktion verwenden möchten.

<?php 

class What { 
    public $foo; 

    public function __construct() { 
     $this->foo = range(0,5); 
    } 
} 

?> 

BTW: Wie andere haben darauf hingewiesen, ist array() keine Funktion. Es ist ein Sprachkonstrukt.

1

Array ist keine Funktion, es ist ein Sprachkonstrukt. Deshalb ist es erlaubt.

0

Class member variables are called "properties" ... may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

http://www.php.net/manual/en/language.oop5.properties.php

0

prüfen Link als ein ähnliches Problem gesendet wurde, und war gelöst: -

http://www.phpbuilder.com/board/showthread.php?t=10366062

Auch können Sie die Beispiele für die Verwendung range() Funktion in PHP sehen .Net-Handbuch, obwohl ich denke, dass das Problem in den Variablen $ foo und public liegen könnte, da es zwischen der Version der PHP-Funktion und Ihrer laufenden PHP-Version möglicherweise zu einem Typenkonflikt oder einem Konflikt kommen könnte.

Ich hoffe, diese Antwort hilft Ihnen ..

+0

Das ist nicht das gleiche Problem. In diesem Beitrag verwendete der Benutzer die PHP-Version 4.4.6, die die Zugriffsmodifizierer "public" und "private" nicht unterstützte. In dieser Frage verwendet das OP die PHP-Version 5.5.3, die die Zugriffsmodifizierer "public" und "private" unterstützt. – Asaph