0

I'm trying to write my site in Controller-Model-View convention without using any framework but I have a problem with __autoload function.
Here's my source_folder/model/database.class.php file:

<?php
function __autoload($sName) {
    $aName = explode('_',$sName);
    if($aName[0] == 'Model')
        include '/model/' . strtolower($aName[1]) . '.class.php';
    else if($aName[0] == 'View')
        include '/view/' . strtolower($aName[1]) . 'class.php';
    else if($aName[0] == 'Controller')
        include '/controller' . strtolower($aName[1]) . 'class.php';
}
/**
 * Description of database
 *
 * @author Lysy
 */
class Model_Database {
   private $oConfig = new Model_Config();

   $this->oConfig->getConfigArray('database');

}

?>

And here's my source_folder/model/config.class.php file:

<?php
include_once '../config.php';

/**
 * Description of config
 *
 * @author Lysy
 */
class Model_Config {

    static function GetConfigArray($name) {
        return $config[$name];
    }
}

?>

The problem appears in line

private $oConfig = new Model_Config();

and it says syntax error, unexpected T_NEW.
I don't understand where lies the problem, because I'm using Netbeans IDE and when I type in private $oConfig = new M the program gives me a hint with Model_Config.
I'd be very glad to read some advices and probable solution to this problem, regards :)

EDIT: I rewrited the class Model_Config to look like this:

class Model_Database {

   private $oConfig;

   __construct() {
        $oConfig = new Model_Config();
    };

   $this->oConfig->getConfigArray('database');

}

But now there is a problem in line

__construct() {

Netbeans says that __construct() is unexpected, the error on the site stays the same, unexpected T_NEW

EDIT2: Oh sorry, too much C++, I keep forgeting about function word

Arkadiusz Galler
  • 153
  • 1
  • 1
  • 8

2 Answers2

2

You can't assign values to member variables using expressions. You have to do that in your constructor or inside of a method.

John Conde
  • 217,595
  • 99
  • 455
  • 496
  • 1
    and while you're at it, you can't do that next line either (`this->oConfig->getConfigArray('database');` – Nanne Dec 14 '13 at 16:38
  • I know about this line it was written just for test purposes. I edit the post to show that making constructor does not solve the problem. – Arkadiusz Galler Dec 14 '13 at 16:41
0

Does your Model_Config contains more than that static method or why do you use "new Model_Config()" ?

That error message and "private" looks like you want to create an object direcly in your property. If you want to add an Model_Config object to the property of a specific class, you should use dependency injection. Here in your constructor for excample:

<?php

class YourClass
{

    private $oConfig;

    public function __construct(Model_Config $oConfig)
    {
         $this->oConfig = $oConfig;
    }
}

A nicer way of injection would be the usage of an interface as type hint. Maybe that method in your Model_Config shouldn't be static.

SenseException
  • 1,015
  • 12
  • 14
  • It was just for test purposes, I write lots of meaningless codes when I'm trying to test something to see various results and find what causes errors. Anyway I want static methods in Model_Config to access them without creating an object by simply Config::GetArray or sth like this and also non-static methods for wider use than just getting some variables from config.php file – Arkadiusz Galler Dec 14 '13 at 17:18