• 締切済み

use と requireの違いは?

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

  • PHP
  • 回答数4
  • ありがとう数1

みんなの回答

回答No.4

PHP5.3からの名前空間における新機能ですね。 http://www.php.net/manual/ja/language.namespaces.importing.php requireは、外部のファイルを読み出してくるもので、 useは、すでに定義された名前空間のものを利用するのに使います。 -----Test.php----- namespace Test; class Cat{......} ----------------- ----index.php------ require 'Test.php'; //ファイルを読んでから $cat = Test\Cat(); //と名前空間で呼び出してもよいが、ちょっと長いので、 use Test\Cat; $cat = new Cat(); //とすれば短くかける ----------------- 基本的に、エイリアス(ショートカット)です。 Windowsなどのファイルパスの記述に似てます。 毎回、階層深いフォルダを開いて行って、実行ファイルを起動するより、 いつも使っているデスクトップなどにショートカットを置いておいてそこから実行ファイルを起動する というような感じです。

baaaaaaaaan
質問者

お礼

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

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

もしかして、PerlのプログラムをPHPだと思って見ているとか。 Perlにはrequireに似たuseがあります。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

トレイトのことなら・・ ファイルではなくクラスにクラスの機能を読み込むものです。 PHP: トレイト http://www.php.net/manual/ja/language.oop5.traits.php

参考URL:
http://www.php.net/manual/ja/language.oop5.traits.php
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

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

関連するQ&A

  • use と require の違いが分かりません。

    use と require の違はなんでしょうか? また、require を2度使うとエラーになってしまうのは なぜでしょうか? 教えてください、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • (require / require_once) (include / include_once)について

    毎度、お世話になります。 今回は、requireとrequire_once(includeとinclude_once)の使い分けについて 教えて下さい。 取りあえず、改造しているPHPでは、include()だけを使って正常に動作しています。 include()させている箇所がいくつもあります。 ただ、やっぱりわからないのは、 requireとrequire_once(includeとinclude_once)に関して、 PHPマニュアルなどを見ても、処理方法の違いだけで、それならば最初から全部、 require_once() 又は、include_once() だけの方が良いように思えるのですが、 例えば、この処理に関しては、絶対、include()。これならば、require()。 また、これなら、include_once()、あるいは、require_onceと言う風に、 明確なものはあるのでしょうか? かなり迷路に迷い込んでます。(時間が止まってます) どうかよろしくお願いします。

    • 締切済み
    • PHP
  • include,require について

    include,require元を知る方法はないのでしょうか? 例としては下記の状況でinclude.phpがどのscriptに呼び出されたかが知りたいのです。 main.phpの内容 <? include 'include.php'; ?> include.phpの内容 <? 処理・・・ ?>

    • 締切済み
    • PHP
  • useとrequireでエラー

    初歩的な質問で失礼いたします。 下記の記述でプログラムを実行すると正常にプログラムが動きます。(省略以降は全く同一のプログラムです) ■実行問題なし1 #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; --------省略--------------- ■実行問題なし2 #!/usr/local/bin/perl use strict; use DBI; --------省略--------------- しかし、下記の記述だとエラーが発生していまいます。 #!/usr/local/bin/perl use strict; use DBI; require 'cgi-lib.pl'; require 'jcode.pl'; --------省略--------------- エラーログは、下記の通りです。 Global symbol "$in" requires explicit package name at search.cgi line 21. Global symbol "$parameter" requires explicit package name at search.cgi line 23. Global symbol "$name" requires explicit package name at search.cgi line 23. Execution of search.cgi aborted due to compilation errors. requireとuseは同時に記述してはいけないのでしょうか? 同時に記述しないと目的のプログラムを実現する方法が大きく変わってきてしまうので、非常に困ってしまいます。 もし、ご存知の方がいらっしゃったら教えてください。 宜しくお願い致します。

  • requireしたライブラリにuseを記入

    メール送信のプログラムを作っています。 本体のプログラムmain.cgiから、 メール送信用のサブルーチンを記入した、 email.plというのを require 'email.pl'; とメール送信が必要な場合だけ読み込んでいます。 この email.plに use Encode; や use Jcode; のようにuse文を記入するのは、 Perlの作法としては適切なのでしょうか。 それともuse文はmain.cgiに記入するのが適切なのでしょうか。 email.plにuse文を記入しても動きますし、 main.cgiにuse文を記入した場合とベンチマークを比べたりしましたが あまり変わらないのですが、 useはコンパイルしたときに実行されるので、 実行のときに読み込まれるrequireしたライブラリに記入していいのか不安なのです。 私としては必要なときだけ読み込みたいので、 email.plにuse文を記入したいのですが。 どうぞよろしくお願いします。

  • require Auth.php

    require 'Auth/Auth.php'; の動作について教えてください。 サンプルソース a.php に、 「require 'Auth/Auth.php';」と冒頭に記述してありました。 PEARだと思うのですが、結局この記述は、 a.phpに、 (1)Auth.phpの内容を取り込む? (2)Auth.phpの内容を継承する? どちらの解釈の方が正しいのでしょうか? 今までrequire だと、指定したphpの内容を取り込む((1)番だと)だと認識していました。 以下ソースのように動作してると思っています。Auth.phpも同じ動作と思っていいものなのでしょうか。 ・test.php <?php echo "start!!\n"; include("include.php"); echo "end!!\n"; ?> ・include.php <?php echo "include start!!\n" ?> ●実行結果 start!! include start!! end!!

    • ベストアンサー
    • PHP
  • requireとincludeどっちを使えばいいのでしょう?

    題名にもある通り、便利な関数やdefineで定義した定数などを別ファイルにしてそれをインクルードしたいとき、一般的にはincludeとrequireどちらを使えばよいのでしょうか? また、includeのほうが軽くなるということはあるのでしょうか? マニュアルではincludeは呼び出したときに何度でも呼び出される旨 http://www.php.net/manual/ja/function.include.php かいてありますが、実践でどのようにつかえばよいかわかりません。 どなたか、ヒントでもかまいませんのでおしえていただけないでしょうか? 皆様は、どちらをどのようにお使いになってらっしゃいますか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 条件分岐によってuseやrequireをする

    ある条件を満たすときだけuse(あるいはrequire)をするということはどうしたらできますか。例えば、次のように、perlの版を判別してuseする/しないを分岐したいのですが、ifではできません。目的は、jperl環境で作成したプログラムを最新のperl環境に移行することです。 if ($]=~/^5\.12/){ use encoding 'cp932'; use Encode; use subs qw(length); sub length { CORE::length(encode('cp932',shift)); }    #以下色々な関数を定義する }

    • ベストアンサー
    • Perl
  • require_onceについて

    MAMPを使用して開発しています。 MAMP/htdocsに入っているa.phpから同一階層にあるb.phpを呼びだそうと思い require_once('b.php'); と記述したのですが Warning: require_once(b.php): failed to open stream: No such file or directory in - on line 13 Fatal error: require_once(): Failed opening required 'b.php' (include_path='.:') in - on line 13 とエラーが表示されます。色々と試してみたもののうまくいかず。 アドバイスを宜しくお願い致します。

    • ベストアンサー
    • PHP
  • require_once()でファイルが読み込めません

    すいません、色々やったみたのですがよく分からなかったので教えてください。 PHPのテンプレートのSmartyを使いたいと思い、公式サイトからダウンロードして/usr/local/lib/php/Smartyにコピーしました。 その後、php.iniのinclude_pathにて".:/usr/local/lib/php/Smarty"と設定し、require_once("Smarty.class.php");としたのですが、 failed to open stream: No such file or directoryや Failed opening required 'Smarty.class.php' というエラーが出て読み込めません。また、phpinfo()を見る限りではphp.iniはきちんと読みにいっているようでした。 ためしに/usr/にSmartyを置き、include_pathもそのように変更してみたのですが読み込めません。カレントディレクトリに配置した場合は上手く読み込めました。また、Smartyでなくてもどのファイルでも読み込めない状況です。 環境はFedora6、Apache2.0、PHP5です。何かアドバイスよろしくお願いします。

    • ベストアンサー
    • PHP