12

PHPで匿名クラスを作成するアイデアが必要です。どうしたらいいのかわからない。

私の制限を参照してください

  • class {}PHPでは、無名関数(のような)のような匿名クラスを作成することはできません。
  • PHPでは、クラススコープはありません(名前空間を除きますが、以下でも同じ問題があります)。
  • PHPでは、変数を使用してクラス名を指定することはできません(などclass $name {})。
  • runkitPECLをインストールするためのアクセス権がありません。

私が必要とするものとその理由

create_class()さて、私はキー名と匿名クラスを受け取るieと呼ばれる関数を作成する必要があります。PHPが受け入れられない別の名前クラスのシンボルを使用したいので、これは私にとって便利です。例えば:

<?php

  create_class('it.is.an.example', function() {
    return class { ... }
  });

  $obj = create_object('it.is.an.example');

?>

だから、私はこの使用を受け入れるアイデアが必要です。私のフレームワークには次のパスがあるため、これが必要です/modules/site/_login/models/path/to/model.php。したがって、model.phpと呼ばれる新しいクラスを宣言する必要がありsite.login/path.to.modelます。

create_object()内部キャッシュに$class定義がある場合は呼び出しit.is.an.example時に(新しいクラスオブジェクトを返すだけです。そうでない場合はロードが必要です。そのため、$classコンテンツを使用してクラスファイルをすばやく検索します。

4

4 に答える 4

9

PHP 7.0では、匿名クラスがあります。私はあなたの質問を完全には理解していませんが、あなたのcreate_class()関数は次のように見えるかもしれません:

function create_class(string $key, array &$repository) {
    $obj = new class($key) {
        private $key;
        function __construct($key) {
            $this->key = $key;
        }
    };
    $repository[$key] = $obj;
    return $obj;
}

これにより、匿名クラスタイプのオブジェクトがインスタンス化され、に登録されます$repository。オブジェクトを取り出すには、オブジェクトを作成したキーを使用します$repository['it.is.an.example']

于 2015-05-13T14:58:49.723 に答える
6

つまり、基本的にはファクトリパターンを実装する必要があります。

Class Factory() {
  static $cache = array();

  public static getClass($class, Array $params = null) {
    // Need to include the inc or php file in order to create the class
    if (array_key_exists($class, self::$cache) {
      throw new Exception("Class already exists");
    }

    self::$cache[$class] = $class;
    return new $class($params);
  }
}

public youClass1() {
  public __construct(Array $params = null) {
     ...
  }
}

重複をチェックするためにキャッシュを追加します

于 2012-03-15T19:15:02.580 に答える
6

stdClassを使用してダミークラスを作成できます

$the_obj = new stdClass();
于 2012-03-15T19:11:32.547 に答える
2

あなたが本当にそれをする必要があるならば、あなたは使うことができますeval()

$code = "class {$className} { ... }";
eval($code);
$obj = new $className ();

しかし、神々はこれを承認しません。そうすれば地獄に行くでしょう。

于 2014-03-12T18:11:16.023 に答える