質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Namespace

各要素の名前の重複による衝突が起こらないよう、一意の名前をつけなければならない範囲のことであり、また、プログラミングにおける識別名を付加する機能のをNamespace(名前空間)と呼ぶ。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

10276閲覧

PHPでuseを使った時にエラーになってしまう

days32

総合スコア19

Namespace

各要素の名前の重複による衝突が起こらないよう、一意の名前をつけなければならない範囲のことであり、また、プログラミングにおける識別名を付加する機能のをNamespace(名前空間)と呼ぶ。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2014/12/16 10:41

ネームスペースとuseステートメントに関して、聞きたいことがあります!

3つのファイルがあります。

  • /var/www/html/php/foo.php
  • /var/www/html/php/bar.php
  • /var/www/html/php/baz.php

これを相対パスを使って行おうとしているので、これをすべてのクラスに格納する必要があります。

lang

1namespace php;

bazのクラスには、下記のようなものがあります。

lang

1namespace php; 2include 'foo.php'; 3include 'bar.php'; 4 5class baz extends bar implements foo {} 6

includeのステートメントを使った場合、エラーは表示されません。
一方、useのステートメントを使った場合は、下記のエラーが表示されます。

PHP Fatal error: Class 'php\bar' not found in /var/www/html/php/baz.php on line 6

どこが間違っているのか教えていただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

PHPの標準関数である spl_autoload_registerを使ってクラスファイルを自動でロードさせたほうがいいと思います。

php

1<?php 2spl_autoload_register(function($class) { 3 $prefix = 'php\'; 4 if( strpos($class, $prefix) === 0) { 5 $className = substr($class, strlen($prefix)); 6 $classFilePath = __DIR__ . '/' $className . '.php'; 7 if (file_exists($classFilePath)){ 8 require $classFilePath; 9 } 10 } 11});

composerを使ってオートロードさせたい場合は以下のようにします。

json

1{ 2 "autoload" : { 3 "psr-4" : { 4 "php\" : "php/ 5 } 6 } 7}

あとはコマンドからcomposer dumpautoload と実行します。

投稿2017/11/04 05:24

naohiro19_

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

use演算子はクラス・インターフェイス・他のネームスペースにエイリアスを与えるために使われます。ほとんどのuseステートメントは、短縮したいネームスペースまたはクラスのことを指します。

lang

1// 同じものです; Namespace\hoge は My\Full\Namespace\hoge の短縮版です 2use foo\bar\Namespace; 3use foo\bar\Namespace as Namespace;

もしuse演算子がクラスまたはインターフェイスの名前で使われているとき下記の役割があります。

lang

1// このあと, "new anotherName()と記述すると" foo\bar\Classnameのインスタンスを生成します 2use foo\bar\Classname as anotherName; 3 4// グローバルクラス - "new ArrayObject()" と "new \ArrayObject()" を同じものにする 5use ArrayObject; 6

use演算子をオートロードと同じものだけ混乱しないようにしてください。オートローダーを登録することによりクラスは自動でロードされます。

投稿2014/12/16 11:47

beans22

総合スコア73

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問