Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung von Anwendungsbeispielen für PHP-Namespaces und automatische Ladeklassen

Ausführliche Erläuterung von Anwendungsbeispielen für PHP-Namespaces und automatische Ladeklassen

伊谢尔伦
伊谢尔伦Original
2017-06-30 09:48:101199Durchsuche

Dieser Artikel führt hauptsächlich den PHP-objektorientiertenNamespace und automatisch geladene Klassen in die Programmierung ein und analysiert den PHP-Namespace und das automatische Laden in Form von Beispiele. Das Konzept, die Funktion, die Verwendung und die zugehörigen Hinweise von Ladeklassen, Freunde in Not können sich darauf beziehen

Dieser Artikel beschreibt den Namespace und die automatischen Ladeklassen der objektorientierten PHP-Programmierung Beispiele. Geben Sie es wie folgt als Referenz an alle weiter:

Namespace

, um doppelte Klassennamen und Fehler zu vermeiden.

<?php
require_once "useful/Outputter.php";
class Outputter {
  // output data
  private $name;
  public function setName($name) {
    $this->name = $name;
  }
  public function getName() {
    return $this->name;
  }
}
$obj = new Outputter(); // 同一命名空间下,类名不能相同,默认命名空间为空。空也是一种命名空间。
$obj -> setName("Jack");
print $obj->getName();
//namespace useful; // 更改命名空间,否则查询不到Hello类,Fatal error: Class &#39;my\Hello&#39; not found
$hello = new Hello();
?>
<?php
// useful/Outputter.php
namespace useful; // 命名空间
class Outputter {
  //
}
class Hello {
}
?>

So rufen Sie eine Klasse im Namespace auf

<?php
namespace com\getinstance\util;
class Debug {
  static function helloWorld() {
    print "hello from Debug\n";
  }
}
namespace main;
// com\getinstance\util\Debug::helloWorld(); // 找不到Debug类
\com\getinstance\util\Debug::helloWorld(); // 加斜杠之后,就从根部去寻找了。
// outPut:hello from Debug
?>

Verwenden Sie das Schlüsselwort use

<?php
namespace com\getinstance\util;
class Debug {
  static function helloWorld() {
    print "hello from Debug\n";
  }
}
namespace main;
use com\getinstance\util;
//Debug::helloWorld(); //Fatal error: Class &#39;main\Debug&#39; not found
util\Debug::helloWorld();
?>

Mit der folgenden Verarbeitung können Sie die Klasse

<?php
namespace com\getinstance\util;
class Debug {
  static function helloWorld() {
    print "hello from Debug\n";
  }
}
namespace main;
use com\getinstance\util\Debug; // 直接使用到类
Debug::helloWorld();
?>

direkt aufrufen, um die globale

global.php

<?php
// no namespace
class Lister {
  public static function helloWorld() {
    print "hello from global\n";
  }
}
?>
<?php
namespace com\getinstance\util;
require_once &#39;global.php&#39;;
class Lister {
  public static function helloWorld() {
    print "hello from ".NAMESPACE."\n"; // NAMESPACE当前namespace
  }
}
Lister::helloWorld(); // access local
\Lister::helloWorld(); // access global
?>
Ausgabe:

Hallo von comgeinstanceutil

Hallo vom globalen

Namespace plus {}

<?php
namespace com\getinstance\util {
  class Debug {
    static function helloWorld() {
      print "hello from Debug\n";
    }
  }
}
namespace main {
  \com\getinstance\util\Debug::helloWorld();
}
?>
Ausgabe:

Hallo von Debug

Globaler Namespace

<?php
namespace { // 全局空间
  class Lister {
    public static function helloWorld() {
      print "hello from global\n";
    }
  }
}
namespace com\getinstance\util {
  class Lister {
    public static function helloWorld() {
      print "hello from ".NAMESPACE."\n";
    }
  }
  Lister::helloWorld(); // access local
  \Lister::helloWorld(); // access global
}
?>

Autoload-Autoload-Klasse

ShopProduct.php

<?php
class ShopProduct {
  function construct() {
    print "ShopProduct constructor\n";
  }
}
?>
<?php
function autoload( $classname ) { // 自动加载,根据类名加载类
  include_once( "$classname.php" );
}
$product = new ShopProduct( &#39;The Darkening&#39;, &#39;Harry&#39;, &#39;Hunter&#39;, 12.99 );
?>
Ausgabe:

ShopProduct-Konstruktor

Weitere Optimierungsverarbeitung

befindet sich im Ordner business/ShopProduct.php

<?php
class business_ShopProduct { // 这里的类命名就要遵循规则了
  function construct() {
    print "business_ShopProduct constructor\n";
  }
}
?>
<?php
function autoload( $classname ) {
  $path = str_replace(&#39;_&#39;, DIRECTORY_SEPARATOR, $classname ); // 智能化处理
  require_once( "$path.php" );
}
$x = new ShopProduct();
$y = new business_ShopProduct();
?>
Ausgabe:

ShopProduct-Konstruktor

business_ShopProduct-Konstruktor

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Anwendungsbeispielen für PHP-Namespaces und automatische Ladeklassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn