views:

350

answers:

2

I want to have a string variable for a PHP class, which would be available to all methods.

However, this variable is quite long, so I want to separate it into multiple lines.

For example,

$variable = "line 1" .
            "line 2" .
            "line 3";

But above doesn't work.

I tried EOD, but EOD is not allowed within class. And when I declare it outside the class, I can't access the variable from within the class.

What is the best way?

A: 

If you are using PHP >= 5.3, you could use HEREDOC syntax to declare your string :

class MyClass {
    public $str = <<<STR
this is
a long
string
STR;

}

$a = new MyClass();
var_dump($a->str);

But this :

  • is only possible with PHP >= 5.3
  • and the string must not contain any variable
    • this is because the string's value must be known at compile-time
    • which, btw, explains why the concatenation, with the ., will not work : it's done at execution time.

And another drawback is that this will put newlines in the string -- which might, or not, be a bad thing.


If you are using PHP <= 5.2 :

You can't do that ; a solution could be to initialize the string in your class' constructor :

class MyClass {
    public $str;
    public function __construct() {
        $this->str = <<<STR
this is
a long
string
STR;
    }
}

(same not with newlines)

Or, here, you can do strings concatenations :

class MyClass {
    public $str;
    public function __construct() {
        $this->str = 'this is' .
                     'a long' .
                     'string';
    }
}

(this way, no newlines)


Else, you can have a string that's surrounded by either single or double quotes, and put it on several lines :

class MyClass {
    public $str = "this is
a long
string";
}

(Here, again, you'll have newlines in the resulting string)

Pascal MARTIN
_this is because the string's value must be known at compile-time_ - wrong.
stereofrog
@stereofrog http://fr2.php.net/manual/en/language.oop5.properties.php says *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* -- so it this really wrong ?
Pascal MARTIN
yes, the manual is wrong about this.
stereofrog
Oh ; do you have any working example of initializing a class property with a non-constant value ?
Pascal MARTIN
i've posted that once, basically it goes like this: `define('foo',rand()); class x { var $bar=foo; };`
stereofrog
Oh I see ; didn't think about using defines in this situation ^^ thanks for the note :-)
Pascal MARTIN
+3  A: 
$var = "this is a really long variable and I'd rather have it " .
 "span over multiple lines for readability sake. God it's so hot in here " .
 "can someone turn on the A/C?";
echo $var;

Which outputs:

this is a really long variable and I'd rather have it span over multiple lines for readability sake. God it's so hot in here can someone turn on the A/C?

What you have now works using the string concatenation operator. If you can post more information regarding your issue, some code or perhaps a further explanation of how it doesn't work. More information will lead you to a better answer.

Anthony Forloney
This will work for a variable inside a method ; but will it work for a class property ? *(which I believe is what's the question's about)*
Pascal MARTIN
Hello, as Martin said, I wanted to declare the variable OUTSIDE of the class and then access it within a method.$var = "line1". "line2";works if I declare it inside a function, but doesn't if I do it outside. It won't even let me.
ebae
Ah, that I have not tried, I could test it out when I am back from work, if need be. But it seems you had already found a solution.
Anthony Forloney