dポイントプレゼントキャンペーン実施中!

use と require(やinclude)の違いは何でしょうか?
requireの使い方はほぼ理解できていると思っていますが、useの使い方がわかりません。
useを使っているところでrequireを使えたりするのでしょうか?
phpの公式をみてもいまいちピンときません。

useについてわかりやすく教えていただけないでしょうか?

A 回答 (4件)

PHP5.3からの名前空間における新機能ですね。


http://www.php.net/manual/ja/language.namespaces …

requireは、外部のファイルを読み出してくるもので、
useは、すでに定義された名前空間のものを利用するのに使います。

-----Test.php-----
namespace Test;

class Cat{......}

-----------------

----index.php------
require 'Test.php'; //ファイルを読んでから

$cat = Test\Cat(); //と名前空間で呼び出してもよいが、ちょっと長いので、

use Test\Cat;

$cat = new Cat(); //とすれば短くかける
-----------------

基本的に、エイリアス(ショートカット)です。
Windowsなどのファイルパスの記述に似てます。
毎回、階層深いフォルダを開いて行って、実行ファイルを起動するより、
いつも使っているデスクトップなどにショートカットを置いておいてそこから実行ファイルを起動する
というような感じです。
    • good
    • 2
この回答へのお礼

あれ?その例だと
require 'Test.php'; //ファイルを読んでから
$cat = new Cat();
と名前空間なしで2行でもいけるのでは?

ショートカット的というイメージには賛成です。つかいこなせれば絶対パスのわずらわしさの代わりになりそうですね。
ただ、それ以外のメリットや効果がいまいちよくわかりません。
まず、これはディレクトリ構造に対応した階層構造にしないといけないのか、それとも勝手に階層序列や階層名を創造しても働くものなのか、とか、requireのように玉突き的に引っ張ってくる対象をつなげれるのか(つなげれない、と公式にはかかれていたような気がしますが、だとするとrequireの方が便利じゃん、ということになる)とか、あるファイル内で定義した名前空間を他のファイルでuse指定するとなぜインクルードできるのか(各ファイル内の定義情報を知るには各ファイル内を見ないといけないのではないかと思うのですが、そうすると全ファイルの中身を検索して名前空間のチェックをかけてひっぱってくるとかいうことをやっているのか?そんな自動全検索をしているとするならば、名前空間の使用をuseで書いてやらなくても、ソース内でいきなり相対指定パスでクラスを読み出せたりできるんじゃないの?)とか。

ありがとうございます。

お礼日時:2012/06/27 00:24

もしかして、PerlのプログラムをPHPだと思って見ているとか。


Perlにはrequireに似たuseがあります。
    • good
    • 1

トレイトのことなら・・


ファイルではなくクラスにクラスの機能を読み込むものです。

PHP: トレイト
http://www.php.net/manual/ja/language.oop5.trait …

参考URL:http://www.php.net/manual/ja/language.oop5.trait …
    • good
    • 0

php公式 には use という関数は有りません。

たぶん、フレームワークとかpearとか、それともだれかのライブラリで提供されてるユーザー定義関数でしょう。
どこに定義されてて、何やってる関数なのかは、あなたのお使いのファイルを調べるしかありません。
require や include は関数のように記述しますが、phpの制御構造です。
http://jp.php.net/manual/ja/function.include.php
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!