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

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

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

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

Q&A

解決済

1回答

2962閲覧

idiorm.phpのORMクラスをオートロードできない

imamoto_browser

総合スコア1161

PHP

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

composer

Composerとは、PHP5.3.2以上で使用可能なパッケージ管理ツールです。指定ディレクトリ内だけでパッケージ管理します。

0グッド

0クリップ

投稿2016/08/28 16:21

編集2016/08/28 16:30

お世話になります、IdiormクラスがIdiormBaseクラスを継承しており、そのIdiormBaseクラスの中でidiorm.phpのORMクラスを呼び出したいのですが、ディレクトリが違うので、うまく呼べず、Slim Application Errorとなってしまいます。

Message: Class 'mycontroller\idiorm\ORM' not found

php

1<?php 2namespace mycontroller; 3 4class Idiorm extends IdiormBase 5{ 6 7 public function find($id) 8 { 9 10 $user = ORM::for_table('Auth') 11 ->table_alias('p1') 12 ->where("id",$id)->find_one(); 13 var_dump($user->as_array()); 14 } 15}

php

1<?php 2namespace mycontroller; 3 4class IdiormBase 5{ 6 public function __construct(){ 7 $this->initialDB(); 8 } 9 public static function initialDB(){ 10 ORM::configure('mysql:host=localhost:3306;dbname=data1'); 11 ORM::configure('username', 'root'); 12 ORM::configure('password', 'xxxxxxxx'); 13 ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 14 } 15}

json

1 "autoload": { 2 "psr-4": { 3 4 "myapp\\": "src/", 5 "mycontroller\\": "public/" 6 7 } 8 },

mycontrollerにバインドしたディレクトリのクラスは読めています。
階層は、mycontrollerがpublicにバインドされていて、publicディレクトリの下に、idiormディレクトリがあり、その中に、idiorm.phpがあり、その中にORMクラスが記述されています。

名前空間を使わず、requireをつかった際はうまく呼べていたのですが、どのように記述すべきでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Idiorm, IdiormBaseの各クラスにはmycontrollerという名前空間が付いているため
この中で呼び出されたクラスもまたmycontroller名前空間に属するクラスだと解釈されています。
これを避けるためにはクラス名を完全修飾名で記述するか、use文で使用を宣言します。

ライブラリIdiormのORMクラスは独自の名前空間を持たないグローバル直下のクラスなので、
先頭にバックスラッシュ(Windowsなら円記号)だけ付けて\ORMが完全修飾名になります。
(パスの指定なんかで頭の/のあるなしで絶対パス、相対パスが変わるような感じ)

use文を使うパターン

php

1namespace mycontroller; 2 3use \ORM; 4 5// 以後、このクラス内の ORM は mycontroller\ORM ではなく \ORMとして扱われる 6 7class IdiormBase

完全修飾名で記述

php

1// すべてのORMを\ORMに書き換える 2\ORM::configure('mysql:host=localhost:3306;dbname=data1'); 3\ORM::configure('username', 'root'); 4\ORM::configure('password', 'xxxxxxxx');

ちなみにClass 'mycontroller\idiorm\ORM' not foundというエラーは
このコードだけでは多分出ないと思うので、色々試しているうちの別のタイミングで
出たものかもしれませんね。

参考

名前空間の使用法: エイリアス/インポート
http://php.net/manual/ja/language.namespaces.importing.php

投稿2016/08/29 14:02

nnssn

総合スコア1221

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

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

imamoto_browser

2016/08/30 07:40

\ORMでいけました。別のタイミングで出たエラーだったようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問