2017-05-29 9 views
1

PHPでnamespaceuseの使用を学び、理解しようとしています。私はまた、php.net documentationについての言及としてspl_autoload_registerを使用しています。私はまだそれを使用して紛らわしいとエラーを取得します。PHP - spl_autoload_registerが `namespace`と` use`で動作しない

  1. php_oop.php
  2. tutor.php

php_oop.php

<?php 
namespace php_oop; 

class php_oop 
{ 
    public function __construct($name){ 
     $this->name = $name; 
    } 

    public function get(){ 
     return $this->name; 
    } 
} 

tutor.php:

私は私のチュートリアルフォルダ上の2つのファイルを持っています

​​

出力

Warning: The use statement with non-compound name 'php_oop' has no effect in C:\xampp\htdocs\tutorial\oop\tutor.php on line 9 string(7) "php_oop" Fatal error: Class 'php_oop' not found in C:\xampp\htdocs\tutorial\oop\tutor.php on line 11

は、私はそれを正しく使用する方法を知ってもいいですか?

+0

クラス名の最初の文字は大文字でなければなりません。 – Nidhi

+2

これは唯一の文体的なものです@ニッディ。 – Bytewave

答えて

2

useimportと異なります。 use使用するすべてのクラスすべての名前空間ではない。あなたの例では、それは次のようになります。php_oop名前空間からphp_oopクラスをインポートします

use php_oop\php_oop; 

詳細と便利なヒントについては、the documentation for importing namespacesを参照してください。

(副作用:spl_autoload_registerのコールバックに渡さ$class_nameは、名前空間を含むクラスのフルネームが含まれている、あなたはオートローダのコードを変更したり、php_oop.phpを移動する必要がありますどちらかオートローダが適切にあなたのクラスをロードするために。ファイルをphp_oopという名前のフォルダにコピーします。

+0

ありがとうございます。私はあなたのようにフォルダを作成することでそれを得ることができました。私のオートローダーコードを変更したい場合は、 'include 'php_oop.php';' – Amran

+0

のようなファイル名を手動で割り当てる必要がありますか?それはオートローダーではないからです。もしあなたが本当にそのようなことをしたいならば、あなたはおそらく '\'または何かによって 'explode'して、結果の配列の最後の文字列を取りたいと思うでしょう。しかし、名前空間による整理されたフォルダ構造を維持することは、衝突のためには優れており、より多くの標準に準拠しています。 – Bytewave

+0

名前空間について再確認したいのですが、ファイル名と同じでなければなりません – Amran

関連する問題