2013-09-19 3 views
5

Я использую dirname(__FILE__) в include в php-скриптах, но на днях я включил его как часть строки и вызвал ошибку. Есть идеи?Могу ли я использовать dirname (__ FILE__) как часть строки?

линия была

private $errorfile = dirname(__FILE__).'/../../../error_logs/error.log'; 

или

private $errorfile = '/../../../error_logs/error.log'; 
error_log($message,3, dirname(__FILE__).$this->errorfile); 

и это вызвало ошибку, таких как

PHP Parse error: syntax error, unexpected '(', expecting ',' or ';' in /home2/futsalti/public_html/_futsal-time-v4.9/public/scripts/php/databaseClass.php

PHP Parse error: syntax error, unexpected ';' in /home2/futsalti/public_html/_futsal-time-v4.9/public/scripts/php/databaseClass.php

EDIT:

Хорошо, только что пришел ко мне .. Может быть, вопрос должен быть Я использую dirname(__FILE__) внутри класса?

+3

Примечание: в PHP 5.3 и выше вы можете использовать '__DIR__' вместо' dirname (__ FILE __) '. – Spudley

+0

Я бы использовал 'dirname ($ _ SERVER ['DOCUMENT_ROOT']), поэтому вы можете избежать всех этих' ../../../..''s. – Rik

ответ

3

Значения свойств по умолчанию должны быть фиксированным постоянным значением; вы не можете использовать динамические значения, переменные, конкатенированные строки или вызовы функций в значении по умолчанию для свойства.

Вы можете использовать константу, и как я уже отмечал ранее в указанном выше комментарии, __DIR__ является действительным для замены dirname(__FILE__).

Таким образом, вы можете сделать это:

class myClass { 
    public $path = __DIR__; 
} 

Это работает, но вы не можете добавить что-нибудь еще к нему в первоначальном заявлении, так что, хотя она становится ближе, это не реально ответить на ваш вопрос ,

Если это должно быть нечто большее, вам нужно определить его в коде, а не по умолчанию. Я предлагаю объявить переменную как пустую строку или null в объявлении свойства и использовать вашу функцию __construct() для заполнения значения по мере необходимости.

class myClass { 
    public $errorFile = null; 
    public function __construct() { 
     $this->errorFile = __DIR__ . ''/../../../error_logs/error.log'; 
    } 
} 

Надеюсь, что это поможет.

+0

Хммм, ладно, я вижу вашу мысль. Спасибо за подсказку –

2

Да, вы можете использовать dirname(__FILE__) внутри класса, но не напрямую. Назначьте путь к $errorfile в какой-либо функции, вызываемой перед использованием этого пути.

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. source

-1

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

Например, этот код будет бросать ошибку вы испытываете:

class Foo() { 
    private $bar = "string1"."string2"; 
} 

Этот код также будет бросить ту же ошибку:

class Foo() { 
    private $bar = 1+1; 
} 

Этот код не будет выдавать ошибку:

class Foo() { 
    private $bar = "string1string2"; 
} 

Возможным обходным путем для вашей проблемы может быть создание метода, который возвращает ошибку журнал.

class Foo() { 
    function getThing() { 
     return "string1"+"string2"; 
    } 
} 
+0

конкатенация строк CAN может использоваться внутри переменной класса –

0

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

Смежные вопросы