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

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

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

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

PHP

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

Q&A

解決済

1回答

1848閲覧

php、namespaceを使いたいがFatal errorが出てしまう。

退会済みユーザー

退会済みユーザー

総合スコア0

Namespace

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

PHP

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

0グッド

0クリップ

投稿2018/08/14 02:49

編集2018/08/16 03:02

前提・実現したいこと

Head.phpのclass「Logic_Head」をindex.phpで利用したいです。

発生している問題・エラーメッセージ

Fatal error: Uncaught Error: Class'\php\Logic_Head'not found~

該当のソースコード

'A/php/Logic/Head.php'

<?php namespace php; class Logic_Head { private static $instance = null; public static function instance() { if(is_null(self::$instance)) { self::$instance = new self(); } return self::$instance;                    ・・・以下略 } } ?>

'A/view/index.php'

<head> <?php \php\Logic_Head::instance()->メソッド名; ?> <head>                    ・・・以下略

試したこと

namespaceを

namespace php\Logic;

などと替えてみましたが変わりませんでした。
あと初歩的ですが、スペル間違いを確認し、検索して調べてみましたが
問題の解決に至りませんでした。

補足情報(FW/ツールのバージョンなど)

・php7.0
・初心者の練習の為、'Logic/Head.php'は知り合いが書いたものです。
(知り合いのところでは問題なく使用できていました。)

初歩的な質問で恥ずかしいですが、どうかご教授お願い致します。

後日談~自己解決方法

その後、元の'Logic/Head.php'はlalavelで使用していた事が分かりました。
自分の環境ではフレームワークを使用していませんでしたので
同じ様にnamespaceを使用しようとしても出来ないのは当たり前でした。

<?php require_once '../../php/Logic/Head.php'; $page = new Logic_Head(); //インスタンス生成 $page->meta_merge(array()); //メタ用メソッド $page->set_title('新しいページ'); //タイトル用メソッド echo $head = $page->create_head();//htmlへ表示 ?>

上記とすることで目的とする「Head.phpのclass「Logic_Head」をindex.phpで利用したい」を実現できました。
namespaceはおいおいinclude_pathを設定し直して、再トライしてみようと思います。

※ 今回改めてPHPマニュアルの大切さが分かりました。

お二人ともありがとうございました。

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

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

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

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

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

m.ts10806

2018/08/14 02:57

phpではない名前をつけたらどうなりますか? また、そのphpファイルはA/view/index.phpからどのように参照されているのでしょうか
退会済みユーザー

退会済みユーザー

2018/08/14 06:24 編集

>phpではない名前をつけたらどうなりますか? 'aaa'などまったく関係のない文字をnamespaceへ書いてみましたが Fatal error: Uncaught Error: Class'\aaa\Logic_Head'not found~ と変わりませんでした。
退会済みユーザー

退会済みユーザー

2018/08/14 03:13

>phpファイルはA/view/index.phpからどのように参照されているのでしょうか てっきりnamespaceを記述するだけで参照可能かと思っていました。 errorが出たことで、もしやpathなどを定義しているファイルに書く必要があるのかな?と見てみましたが分からず。。
m.ts10806

2018/08/14 09:44

理解できているところ、実際にやってみことを整理されたほうが良いです。 phpマニュアルの書き方は初学者にも優しいと思いますよ。まずは動かしてみてください。
退会済みユーザー

退会済みユーザー

2018/08/14 23:56

頭の中がごちゃごちゃしているので、一旦整理して、phpマニュアルを読み返してみます。アドバイスありがとうございました。
guest

回答1

0

ベストアンサー

'A/view/index.php' で useしてないとか?
ファイルの所在が離れているときは、php.iniのinclude_pathに組み込む必要があるけど、やってないとか。

PHP: 名前空間の使用法: エイリアス/インポート - Manual

php

1// これは use My\Full\NSname as NSname と同じです 2use My\Full\NSname;

投稿2018/08/14 03:00

編集2018/08/14 05:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/08/14 04:28

useはas別名と一緒に使って、長いnamespaceを短くする際に使うのかと思っていました。
退会済みユーザー

退会済みユーザー

2018/08/14 06:12 編集

useについてphpマニュアルを読みましたが、今は頭がいっぱいで理解が追い付きませんでした。     そして、php.iniのinclude_pathへは何も設定していなかった為、’Head.php’の絶対パスをinclude_pathに追記してみました。Apacheを再起動して再度確認しましたが、まだ同じエラーが出ています。
退会済みユーザー

退会済みユーザー

2018/08/15 00:00

頭の中がごちゃごちゃしているので、一旦整理して、phpマニュアルを読み返してみます。質問を一旦解決とし、改めたいと思います。ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問