Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 4 of 4
  1. #1
    Regular Coder
    Join Date
    Jun 2006
    Location
    UK
    Posts
    922
    Thanks
    302
    Thanked 3 Times in 3 Posts

    Question Cannot concatinate a variable to a protected variable?

    Hi

    why does the following syntax generate an error:



    Code:
    <?php
    class Foo
    {
        protected $my_static = $var .  'foo';
    }
    Parse error: syntax error, unexpected T_VARIABLE in /var/www/test.php on line 4

  • #2
    Regular Coder bacterozoid's Avatar
    Join Date
    Jun 2002
    Location
    USA
    Posts
    490
    Thanks
    24
    Thanked 35 Times in 35 Posts
    It's not because you can't concatenate stuff, it's because you can't use a variable there. When you instantiate that class, it has no idea what $var even is.

    Something like this is probably what you want:

    Code:
    class Foo {
    
      protected $foo;
    
      function __construct($var) {
        $this -> foo = $var . 'bar';
      }
    
    }

  • Users who have thanked bacterozoid for this post:

    phantom007 (01-22-2012)

  • #3
    Regular Coder
    Join Date
    Jun 2006
    Location
    UK
    Posts
    922
    Thanks
    302
    Thanked 3 Times in 3 Posts
    That solved my problem.

    Many thanks sir.

  • #4
    God Emperor Fou-Lu's Avatar
    Join Date
    Sep 2002
    Location
    Saskatoon, Saskatchewan
    Posts
    16,987
    Thanks
    4
    Thanked 2,660 Times in 2,629 Posts
    This description is a little inaccurate, though on the right lines. It doesn't matter if the scope was to include another member, the problem is that a default value to a member property cannot be an expression at all. Only constant data is allowed, not even a private $var = 4 + 4; is allowed.
    As pointed out, a simple constructor gets around this problem completely. You don't even need to accept anything:
    PHP Code:
    public function __construct()
    {
        
    $this->foo 4;

    This is why I recommend initializing all variables within the constructor instead of the member signature. Since I like to keep it consistent, I won't split the two up, but more often than not a member property is dynamic in nature.


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •