2014-11-18 2 views
1

Я получаю эту ошибку в php. Я пытаюсь использовать substr в классе. Вот мой код:php syntax error неожиданно ')'

<?php 
Class Test{ 
    public $name = "for testing only"; 
    public $part = substr($this->name, 5, 2); 

    public function show() { 
     echo $this->part; 
     echo $this->name."\n"; 
    } 
    public function change($data) { 
     $this->name = $data; 
    } 
} 

$myTest = new Test(); 
$myTest->show(); 
$myTest->change("something else"); 
$myTest->show(); 
?> 

Aptana выдвигает на первый план (и первый, в строке 4 и говорит мне "ошибка синтаксиса"

Netbeans выделяет всю строку 4 и говорит мне

unexpected: (expected =>,::,',`,OR,XOR and lots more.

.

Когда я запускаю код в виде PHP скрипта с помощью меню Aptana Run сообщение об ошибке:

Parse error: syntax error, unexpected '(', expecting ',' or ';' in C:\path\to\file\test.php on line 4

Когда я изменяю $this->name к $name Aptana только подчеркивает ( Когда я использую этот код из интерактивного режима в Windows, кажется, работает:

Interactive mode enabled 

<?php $name = "for testing only"; 
$part = substr($name, 5, 2); 
echo $name; echo $part; 
?> 
^Z 
for testing onlyes 

Кто-нибудь знает, что я делаю неправильно? Есть ли substr() внутри класса?

+0

Это '$ this-> File' не существует находится в вашем классе! – Rizier123

+0

@ Rizier123: Вы правы. Я отредактировал вопрос. – tzvi

ответ

3
public $part = substr($this->file, 5, 2); 

Выше не действительный синтаксис. Из the manual:

Class member variables are called "properties". They are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration. This declaration 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.

Другими словами, значение этого свойства может быть только целое число, с плавающей точкой, строка, логическое значение, или пустой массив. Выражения не допускаются.

Чтобы исправить это, вы можете инициализировать это значение внутри вашего конструктора:

public $part; 

public function __construct() { 
    $this->part = substr($this->name, 5, 2) 
} 
4

У вас не может быть выражений. Вы должны применить substr() внутри __construct.

Также $this->file не определен в любом месте вашего класса. Возможно, вы хотите:

function __construct(){ 
    $this->part = substr($this->name, 5, 2); 
} 
+0

Извините «файл» должен быть «именем». Я отредактировал вопрос, чтобы соответствовать. – tzvi

+0

см. Часть __construct – dynamic

0

Вы не можете объявить выражение как значение по умолчанию.

0

Try применения SUBSTR в конструкторе.

Также $this->file дает мне Undefined property: Test::$file in - on line 7, так как она не определена ...

<?php 
Class Test{ 
    public $name = "for testing only"; 
    public $part; 

    function __construct() { 
     $this->part = substr($this->file, 5, 2); 
    } 

    public function show() { 
     echo $this->part; 
     echo $this->name."\n"; 
    } 
    public function change($data) { 
     $this->name = $data; 
    } 
} 

$myTest = new Test(); 
$myTest->show(); 
$myTest->change("something else"); 
$myTest->show(); 
?> 
+0

извините, что должно было быть $ test-> name. Я отредактирую оригинал. – tzvi