Home  >  Article  >  Backend Development  >  PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

伊谢尔伦
伊谢尔伦Original
2017-07-01 10:07:476135browse

use just uses the namespace ,
but if you want to call the class, you must load the class file, or load it automatically .

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

Even if one of the classes is introduced, if there is no automatic loading mechanism, an error will still be reported

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

Several usages of use

namespace Blog\Article;
class Comment { }

//创建一个BBS空间(我有打算开个论坛)
namespace BBS;

//导入一个命名空间
use Blog\Article;
//导入命名空间后可使用限定名称调用元素
$article_comment = new Article\Comment();

//为命名空间使用别名
use Blog\Article as Arte;
//使用别名代替空间名
$article_comment = new Arte\Comment();

//导入一个类
use Blog\Article\Comment;
//导入类后可使用非限定名称调用元素
$article_comment = new Comment();

//为类使用别名
use Blog\Article\Comment as Comt;
//使用别名代替空间名
$article_comment = new Comt();

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

1. The first introduction method (provided there is automatic loading Mechanism)

use OSS\OssClient; // 表示引入Class 'OSS\OssClient'

When used,

$ossClient = new OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, false);

or this

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);

can be used!

2. The second introduction method (provided there is an automatic loading mechanism)

import('@.ORG.OSS.OssClient'); // thinkphp中的加载机制

When used, there can only be an automatic loading namespace in

$ossClient = new OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, false);  // 其中OSS是命名空间

thinkphp Mechanism,

The namespace in the Liberal directory of the framework can be automatically identified and located, as follows

Library FrameworkClass LibraryDirectory
│├─Think Core Think Class library package directory
│ ├─Org Org class library package directory
│ ├─... More class library directory

So, if there is a namespace, you don’t need to import the file.
But for a class without a namespace, if the file is not introduced, an error will be reported.
PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

## Just import it,


PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes

3.autoload

This is an automatic loading function. In PHP5, this function will be triggered when we instantiate an undefined class. Look at the following example:

printit.class.php 
 
<?php 
 
class PRINTIT { 
 
 function doPrint() {
  echo &#39;hello world&#39;;
 }
}
?> 
 
index.php 
 
<?
function autoload( $class ) {
 $file = $class . &#39;.class.php&#39;;  
 if ( is_file($file) ) {  
  require_once($file);  
 }
} 
 
$obj = new PRINTIT();
$obj->doPrint();
?>

After running index.php, hello world is output normally. In index.php, since printit.class.php is not included, when instantiating printit, the autoload function is automatically called. The value of the parameter $class is the class name printit. At this time, printit.class.php is introduced.

4.spl_autoload_register

Look at spl_autoload_register() again. This function has the same effect as autoload. Let’s look at a simple example:

<?
function loadprint( $class ) {
 $file = $class . &#39;.class.php&#39;;  
 if (is_file($file)) {  
  require_once($file);  
 } 
} 
 
spl_autoload_register( &#39;loadprint&#39; ); 
 
$obj = new PRINTIT();
$obj->doPrint();
?>

Replace autoload with the loadprint function. But loadprint will not be triggered automatically like autoload. At this time, spl_autoload_register() will work. It tells PHP to execute loadprint() when it encounters an undefined class.

spl_autoload_register() calls

staticmethod ,

<? 
 
class test {
 public static function loadprint( $class ) {
  $file = $class . &#39;.class.php&#39;;  
  if (is_file($file)) {  
   require_once($file);  
  } 
 }
} 
 
spl_autoload_register(  array(&#39;test&#39;,&#39;loadprint&#39;)  );
//另一种写法:spl_autoload_register(  "test::loadprint"  ); 
 
$obj = new PRINTIT();
$obj->doPrint();
?>

The above is the detailed content of PHP detailed explanation of examples of use, namespace, imported class files and automatically loaded classes. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn