web-dev-qa-db-ja.com

PHP)のクラスにファイルを含める

クラス内にPHP変数を含むファイルを含めることは可能ですか?クラス全体内のデータにアクセスできるようにするための最良の方法は何でしょうか?

私はこれをしばらくグーグルしてきましたが、どの例もうまくいきませんでした。

13
Jerodev

最良の方法は、外部ファイルを介してそれらを含めるのではなく、それらをロードすることです。

例えば:

// config.php
$variableSet = array();
$variableSet['setting'] = 'value';
$variableSet['setting2'] = 'value2';

// Load config.php ...
include('config.php');
$myClass = new PHPClass($variableSet);

// In a class you can make a constructor
function __construct($variables){ // <- As this is autoloading, see http://php.net/__construct
    $this->vars = $variables;
}
// And you can access them in the class via $this->vars array
14
Mihai Iorga

実際には、変数にデータを追加する必要があります。

<?php
    /*
        file.php

        $hello = array(
            'world'
        )
    */

    class SomeClass {
        var bla = array();
        function getData() {
            include('file.php');
            $this->bla = $hello;
        }

        function bye() {
            echo $this->bla[0]; // Will print 'world'
        }
    }
?>

パフォーマンスの観点からは、設定を保存するために.iniファイルを使用する方がよいでしょう。

[db]
dns      = 'mysql:Host=localhost.....'
user     = 'username'
password = 'password'

[my-other-settings]
key1 = value1
key2 = 'some other value'

そして、あなたのクラスでは、次のようなことができます。

class myClass {
    private static $_settings = false;

    // This function will return a setting's value if setting exists,
    // otherwise default value also this function will load your
    // configuration file only once, when you try to get first value.
    public static function get($section, $key, $default = null) {
        if (self::$_settings === false) {
            self::$_settings = parse_ini_file('myconfig.ini', true);
        }
        foreach (self::$_settings[$group] as $_key => $_value) {
            if ($_key == $Key)
                return $_value;
        }
        return $default;
    }

    public function foo() {
        $dns = self::get('db', 'dns'); // Returns DNS setting from db
                                       // section of your configuration file
    }
}
1
Eugene Manuilov