簡體   English   中英

如果我可以動態訪問類代碼,PHP可以創建該類的對象嗎?

[英]PHP can I create an object of the class if I dynamically have access to the codes of class?

這有點奇怪,但是我想創建一個存儲在另一個文件中的類的對象,我有文件的路徑,但沒有類的名稱。 場景是,目錄中存儲了許多文件,每個文件僅包含一個類。 在此目錄之外的是另一個文件,在該文件中,我正在開發一個函數,該函數采用文件名,訪問文件並從中獲取代碼,然后在該文件中創建該類的對象並返回該對象。 我確信這是有可能的,但無法使其正常工作。 有誰能夠幫助我 ?

在使用array_diff()包含文件之前和之后比較get_declared_classes()的結果:

<?php

  $before = get_declared_classes();
  include_once('path/to/file');
  $after = get_declared_classes();

  $newClasses = array_diff($after, $before);

  for ($i = 0; isset($newClasses[$i]); $i++) {
    ${'class'.$i} = new $newClasses[$i];
    echo "New class $newClasses[$i] instantiated in variable \$class$i\n";
  }

您可以使用get_declared_classes()

例如:

$klass = end(get_declared_classes());
$obj = new $klass;

這很簡單,但不是很安全。

1.將源文件加載為文本,匹配正則表達式的內容,該正則表達式將以$ classname返回類的名稱。

2.根據源代碼文本進行任何必要的檢查,以確保在“加載過程”中需要此類,例如提取構造函數參數。

  1. require_once('the_file.php')

  2. $ my_new_instance = new $ classname()(假設您沒有構造函數參數)或$ my_new_instance = new $ classname($ param1,$ param2),前提是您已從源分析階段提取了參數$ param1,$ param2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM