2017-02-24 2 views
2

Ich habe versucht, das AWS SDK nach diesem Einsatz: http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/installation.htmlPHP automatisch geladen eigene Klassen und AWS SDK

ich die .phar-Datei beide versucht habe und die Zip entpacken, aber ich laufe in Fragen.

Ich verwende die __autoload Funktion in PHP wie folgt aus:

// autoload classes 
function __autoload($class) { 
    require_once ('./system/classes/'.strtolower($class).'.php'); 
} 

Das allein gut funktioniert. Allerdings schließe ich das SDK wie so:

require '/path/to/aws.phar'; 

Mein System nicht meine eigenen Klassen nicht mehr finden können (diejenigen, die bisher noch nicht an der Zeit, die ich schließen AWS SDK, das ist genannt hat).

Was fehlt mir? Was habe ich falsch gemacht?

+0

Mit dem Komponisten ein, bei weitem die einfachste. – Augwa

+0

Verwenden Sie, was am besten für Sie funktioniert. –

Antwort

2

Dies ist, weil mit der __autoload Methode können Sie nur einen Autoloader haben, und aws muss einen eigenen Autoloader hinzufügen. Es ist viel besser, spl_autoload_register zu verwenden, da dies mehrere Autoload-Funktionen ermöglicht, so dass Ihre selbst dann noch verfügbar sind, wenn aws.phar eine eigene hinzugefügt hat.

Try this:

spl_autoload_register(function ($class) { 
    require_once ('./system/classes/'.strtolower($class).'.php'); 
}); 

Siehe docs auf diese hier: http://php.net/manual/en/function.spl-autoload-register.php

+0

Ich habe viel zu lernen, denke ich. Vielen Dank, ich werde es ausprobieren! – gregoff

+0

Ich würde dir auch empfehlen, einen Blick auf Composer https://getcomposer.org/ zu werfen, der nicht nur die Abhängigkeiten anderer Bibliotheken in php verwaltet, sondern dir auch erlaubt, deine eigenen Klassen zum Autoload zu konfigurieren. – Theo

+0

Es tut aber nie weh, zu erfahren, wie Autoloading funktioniert. –

1

Es ist nicht schwierig, den PHP-FIG SP4 autoload Standard zu lernen und es selbst tun. Dies verwendet spl_autoload_register() und Sie können mehr als einen Autoloader verwenden. Hier ist ein Beispiel für eine Do-it-yourself-Autoloader-Klasse, die ich gemacht habe, indem ich nur die PHP-FIG-Standards und das PHP-Handbuch gelesen habe.

<?php 
namespace Acme\Framework; //Just to use namespaces in this example. 

class Autoloader 
{ 
    private function __construct() 
    { 
     ; 
    } 

    private function __clone() 
    { 
     ; 
    } 

    private static function autoload($qualifiedClassName) 
    { 
     $nsPrefix = 'Acme\\'; 
     $baseDir = 'C:/public/www/acme/src/'; // /public/www/acme/src/ 
     $nsPrefixLength = strlen($nsPrefix); 

     if (strncmp($nsPrefix, $qualifiedClassName, $nsPrefixLength) !== 0) { 
      return; //Go to next registered autoloader function/method. 
     } 

     $file = $baseDir . str_replace('\\', '/', substr($qualifiedClassName, $nsPrefixLength)) . '.php'; //substr() returns the string after $nsPrefix. 

     if (!file_exists($file)){ 
      echo "<h1>$file</h1>"; 
      throw new \RuntimeException("The file {$file} does not exist!"); 
     } 

     if (!is_file($file)){ 
      throw new \RuntimeException("The file {$file} is not a regular file!"); 
     } 

     if (!is_readable($file)){ 
      throw new \RuntimeException("The file {$file} is not readable!"); 
     } 

     require $file; 
    } 

    public static function init() 
    { 
     /* 
      Just make another method in this class and alter this code 
      to run spl_autoload_register() twice. 
     */ 

     if(!spl_autoload_register(['self', 'autoload'])) 
     { 
      throw new \RuntimeException('Autoloader failed to initialize spl_autoload_register().'); 
     } 
    } 
} 

Ich benutze es so während Bootstrap Zeit.

require 'Autoloader.php'; //Autoloader for objects. 
Autoloader::init(); 

Dies könnte geändert werden, um einen anderen Autoloader für Code in einem anderen Verzeichnis zu unterstützen.

Ich hoffe, das war hilfreich. Viel Glück für Sie, und vielleicht ist Ihr Projekt ein Erfolg!

Mit freundlichen Grüßen,

Anthony Rutledge

+0

Hilfreiches Lesen! Danke vielmals! – gregoff

+0

Sie sind herzlich willkommen. –

Verwandte Themen