PHP: загрузить класс в классе

У меня есть класс, который предназначен для «Нагрузка» другой класс, однако я не смог заставить его работать.

Сообщение об ошибке

Fatal error: Call to undefined method stdClass::echoString() in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\classes\example.php on line 5

Код

Мой код разбит на три основных раздела:

  • api.php — класс для загрузки других классов.
  • API/exampleExternalAPI.php — (несколько файлов) классы, которые api.php грузы

  • example.php — файл, который использует основной класс (api.php)

Если это поможет, эти файлы могут быть загружены с моего раздаточная

api.php

<?php
/* Config */
define('pathToAPIs','API/');

/* Autoload Function */
spl_autoload_register(function($className){
$namespace=str_replace("\\","/",__NAMESPACE__);
$className=str_replace("\\","/",$className);
$class=pathToAPIs.(empty($namespace)?"":$namespace."/")."{$className}.php";
include_once($class);
});

class api {
private $listOfAPIs;

public $APIs;

public function __construct($setAPI = null){
$this->updateListOfAPIs();
if (isset($setAPI)){
return $this->setAPI($setAPI);
}
}
public function setAPIs($setAPIs){
$this->APIs = null; // clears a previous call to this method
if (!is_array($setAPIs)){ // if not an array
$setAPIs = array($setAPIs); // make array
}
foreach ($setAPIs as $setAPIType){
if(in_array($setAPIType,$this->listOfAPIs)){
$array[$setAPIType] = new $setAPIType;
}
}
$this->APIs = json_decode(json_encode($array), FALSE); // convert array of required api objects to an object
return $this->APIs;
}
public function getListOfAPIs($update = false){
if ($update){
$this->updateListOfAPIs();
}
return  $this->listOfAPIs;
}
private function updateListOfAPIs(){
$this->listOfAPIs = null; // clears a previous call to this method
$it = new FilesystemIterator(pathToAPIs);
foreach ($it as $fileinfo){
$filename = pathinfo($fileinfo->getFilename(), PATHINFO_FILENAME); // removes extension
$this->listOfAPIs[]= $filename;
}
}
public function __call($method,$args){

}
}

API / exampleExternalAPI.php

<?php

class exampleExternalAPI {

public function echoString($string){
echo $string;
}
}

example.php

<?php
require_once 'api.php';
$api = new api();
$api->setAPIs('exampleExternalAPI');
$api->APIs->exampleExternalAPI->echoString('string');

Справочная информация

(может дать некоторое представление о моем безумии)

  • Я работаю над проектом, где мне нужно подключиться к множеству внешних API.
  • Поэтому я решил создать класс для наблюдения за всеми связями с внешними API-интерфейсами (не уверен, что лучший способ — новинка в объектно-ориентированном программировании).

0

Решение

Я не совсем уверен, какую проблему вы пытаетесь решить, но если ваш APIs это простой stdClass Например, он должен работать как положено:

public function setAPIs($setAPIs)
{
$this->APIs = new stdClass; // clears a previous call to this method
if (!is_array($setAPIs)) { // if not an array
$setAPIs = array($setAPIs); // make array
}
foreach ($setAPIs as $setAPIType) {
if (in_array($setAPIType, $this->listOfAPIs)) {
$this->APIs->{$setAPIType} = new $setAPIType;
}
}
return $this->APIs;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]