smartyの$this->って何を表しているんですか?

このQ&Aのポイント
  • EC-CUBE、smartyを勉強中のものです。smartyなのかEC-CUBEどちらの質問になるのかさえもわからなかったのですが・・・・・現在EC-CUBEをカスタマイズしているのですが、smartyの理解が浅く苦戦しています。
  • 大変基本的な質問で申し訳ないのですが、よくfunction内で使われている『$this->』の意味を教えて下さい!$this変数の中身は、普通にどこかでnewされているものが入っているのでしょうか?(EC-CUBEで使われているもの?)それとも$thisという書き方で、例えば$thisの入ってるfunction内のメソッドを呼び出しているのでしょうか?(smarty側のもの?)
  • どなたかご教授お願いいたします。
回答を見る
  • ベストアンサー

【smarty】smartyの$this->って何を表しているんですか

【smarty】smartyの$this->って何を表しているんですか?【EC-CUBE】 EC-CUBE、smartyを勉強中のものです。 smartyなのかEC-CUBEどちらの質問になるのかさえもわからなかったのですが・・・・・ 現在EC-CUBEをカスタマイズしているのですが、smartyの理解が浅く苦戦しています。 大変基本的な質問で申し訳ないのですが、よくfunction内で使われている『$this->』の意味を教えて下さい! $this変数の中身は、普通にどこかでnewされているものが入っているのでしょうか?(EC-CUBEで使われているもの?) それとも$thisという書き方で、例えば$thisの入ってるfunction内のメソッドを呼び出しているのでしょうか?(smarty側のもの?) どなたかご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

smartyってPHPの環境ですよね。 PHPではクラス内で自分自身のオブジェクトを指す時に「$this->」を使います。当然、矢印の先は自分自身のプロパティなりメソッド(function)です。 書かれた時点でそのクラス自体がnewされているわけではありませんが、外部からそのクラスがnewされた後で使われる部分であることには変わりありません。

imo_kujira
質問者

お礼

ご回答ありがとうございます! なるほど、そういうことだったのですね。もやもやしていた部分がわかりとてもすっきりしました★ありがとうございます!

関連するQ&A

  • Smartyの変数について

    Smartyでテンプレートに変数を表示させる場合、assign以外で変数を記述する方法はありますか? 以前EC-CUBEの改造をしていた時は$this->index=34567;などと値を入力したものをテンプレートで$indexとすれば34567が表示されていたのですが・・・。 何か設定が必要なのでしょうか?

    • ベストアンサー
    • PHP
  • Smartyでテンプレートが読み込めない

    下記のソースを実行すると、テンプレートが読み込めずエラーになってしまいます。 うーん、何故なのか分からず困っております。 phpのバージョンは4.4.6なのですが、Ver5以降でないとサポートされないのでしょうか。 [source] <?php require_once("Smarty.class.php"); class MySmarty extends Smarty { function _MySmarty() { $this->Smarty(); $this->template_dir="../templates"; $this->compile_dir="../templates_c"; } } $o_smarty=new MySmarty(); $o_smarty->display("hello.tpl"); ?> [error message] Warning: Smarty error: unable to read resource: "hello.tpl"

    • ベストアンサー
    • PHP
  • smaryテンプレートを使う上で、Smartyオブジェクトを二つ作成し

    smaryテンプレートを使う上で、Smartyオブジェクトを二つ作成し、それぞれのそのなかの変数をひとつのテンプレートに表示するという方法は可能でしょうか?つまりそれぞれを同じテンプレートに表示する、という方法はできるのでしょうか?PHPは下記のようになります。 $smarty = new Smarty(); $smarty2 = new Smarty(); $smarty->assign('abc', $def); $smarty2->assign('ghi', $jkl); $smarty->display('aaa.tpl'); $smarty2->display('aaa.tpl'); それとも、オブジェクトと表示するテンプレートは1つずつでないといけないとだめで、$smartyと$smarty2は、どっちかひとつに統一する必要があるのでしょうか?

    • ベストアンサー
    • PHP
  • setTimeoutのthis参照について

    prototypeメソッドの中でsetTimeout関数を使用したところ、thisで自身の関数を参照しなくなりました。setTimeoutの挙動についてぐぐってみたのですが、いまいちsetTimeoutを使用したときのスムーズな記述方法がわかりません。 ******************************** var hoge=function(){ this.myName="ほげ"; } hoge.prototype={ init:function(){ setTimeout(function(){ hoge.prototype.displayName(); // ★(1)setTimeout関数の中でのメソッドの適した呼び出し方は? // ↑の記述でも呼び出せるけど、間違ってる気がする。。 },1000) }, displayName:function(){ // ★(2)ここでhogeオブジェクトのmyNameプロパティを参照するにはどう記述すれば良いのか? //console.log(this.myName); //↑setTimeoutを使ったのでthis参照はwindowオブジェクトになっているから違う //console.log(hoge.myName); →undefinedを返す } } window.onload=function(){ var a=new hoge(); a.init(); } ******************************** 上記のようなprototype関数を使用したときのスムーズな記述方法を教えていただけませんでしょうか。 知りたいのは下記2点です。 ★(1)prototypeメソッドを使用したとき、setTimeout関数の中でのメソッドの適した呼び出し方は? ★(2)setTimeout関数内で呼び出したメソッドから、自身のオブジェクトのプロパティを参照するにはどう記述すれば良いのか? 初心者なので説明が下手だったり、質問内容で間違った記述があるかもしれません。 質問内容で問題がありましたらご指摘いただけると助かります。

  • Webアプリ作成時のオブジェクト指向について

    Webアプリ作成時のオブジェクト指向について質問させてください。 Webアプリはデータベースやテンプレートなどを使って作成することが多いと思いますが、例えばデータベースにPDO、テンプレートにSmartyを用いてHogeクラスを作る場合、 class Hoge { protected $db; protected $tpl; function __construct() { $this->db = new PDO(); $this->tpl = new Smarty(); } } のようにHogeクラスのプロパティに直接PDOとSmartyのインスタンスを持たせるのはありなのでしょうか?ただこの場合だとデータベースやテンプレートを使わずに終了した場合に無駄になってしまうような気がするが気がかりです。 かといって毎回各メソッドの中でnew PDO()やnew Smarty()をするのは面倒な気がするんですが。何かいい方法やコツがあれば教えてください。

    • ベストアンサー
    • PHP
  • Smartyでテンプレートの場所を指定する方法

    Smartyでテンプレートファイルの場所を指定するいい方法を教えてください。 公式マニュアルには基本的には(1)のようにやるのだと書いてあります。そして拡張セットアップとして(2)の方法が紹介されています。これなら「ディレクトリパスの設定を同じ変数に何度も割り当てる代わりに、一箇所でそれらを行う事が出来ます」とのことですが…。 しかし拡張セットアップの方法でも、プログラムファイル(.php)の中に環境依存の値を記述しています。私はJava開発の経験はあり、PHP開発の経験は無く、現在は趣味の範囲でPHPをやっています。 で、Javaの経験からすると、環境依存の値も設定ファイルのパスもプログラムファイルに書くことはまず無いので、(2)の方法でも気持ち悪く感じます…。また「ページを呼び出すたびに毎回setup.phpを呼ぶの?サーバー起動時に読み込むべき値・ファイルだろうが…」とも思ってしまいます。 …しかし私がどう感じるかは別として、実際の開発の現場ではどうすることが多いのか知りたくて質問をする事にしました。 質問は以下です。 [a]Smartyのテンプレートファイルのパスなどは、どこにどう書くことが多いのか? [b]Smartyに限らず、PHPという言語では、環境設定の値や設定ファイルのファイル名やパスを、プログラムファイル(.php)に書くのがあたりまえなのか?どうすることが多いのか。 [c]PHPではプログラムで使う値として、サーバー起動時に設定値・設定ファイルを読み込む一般的な仕組みがあるか?(サーバー設定値でもないのにphp.iniに書いてini_getで取得するなんてことが許される?他にもっとスマートな方法がある?) ※具体的な例を挙げて教えていただけると助かります。また、「あまりやらないけど、こうやったこともあるよ」などというイレギュラーなケースも教えていただけるとうれしいです。 よろしくお願いします。 --(1)index.php--------------------------------------------- <?php require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = '/web/www.example.com/guestbook/templates/'; $smarty->compile_dir = '/web/www.example.com/guestbook/templates_c/'; $smarty->config_dir = '/web/www.example.com/guestbook/configs/'; $smarty->cache_dir = '/web/www.example.com/guestbook/cache/'; $smarty->assign('name','Ned'); $smarty->display('index.tpl'); ?> ----------------------------------------------------------- 基本的なインストール | Smarty http://www.smarty.net/docs/ja/installing.smarty.basic.tpl --(2)setup.php--------------------------------------------- <?php require('Smarty.class.php'); class Smarty_GuestBook extends Smarty { function __construct() { parent::__construct(); $this->template_dir = '/web/www.example.com/guestbook/templates/'; $this->compile_dir = '/web/www.example.com/guestbook/templates_c/'; $this->config_dir = '/web/www.example.com/guestbook/configs/'; $this->cache_dir = '/web/www.example.com/guestbook/cache/'; $this->caching = Smarty::CACHING_LIFETIME_CURRENT; $this->assign('app_name', 'Guest Book'); } } ?> --(2)index.php--------------------------------------------- <?php require('guestbook/setup.php'); $smarty = new Smarty_GuestBook(); $smarty->assign('name','Ned'); $smarty->display('index.tpl'); ?> ----------------------------------------------------------- 拡張セットアップ | Smarty http://www.smarty.net/docs/ja/installing.smarty.extended.tpl

    • ベストアンサー
    • PHP
  • smartyにAPIの動的データを呼び出したい

    Smartyを初めて勉強して、基本的な部分はわかったのですが APIとの連携がわからない部分があります。 期待する結果として、テンプレートにYahoo知恵袋などの検索結果を読み込みたいのですが、 $smarty->assign('msg','Hello World!'); $smarty->assign('msg2','Hello World!2'); この部分のmsgとmsg2の中身をAPIで取得したデータに変えたいと思っています。 この変数の中を外部ファイルのリスト(txt)から取得することは可能ですか? もしくはさらにPHPを作成してその出力結果を読み込むことは可能なのでしょうか? 目的としてはmsgやmsg2の値を変更したいということです。 初心者の質問で申し訳ないですが、ご回答いただけると助かります。

    • 締切済み
    • PHP
  • Smarty コンバートエラー??

    はじめまして。 PHP初心者です。 テンプレートにオブジェクト配列を渡して、表示させたいのですが、 テンプレートをコンパイルする際にエラーがでてしまいます。 呼び出し元のtest.phpに”echo $objArray[0] -> get_id();”と書くと正常に表示されるのでテンプレートと問題と思うのですが、原因が解らずこまっております。。。 ご指導お願い致します。 ■環境 OS:Fedora 4 php-5.2.0 Smarty-2.6.13 ■ブラウザに表示されるエラー Catchable fatal error: Object of class User could not be converted to string in /home/dev/board/templates_c/%%6D^6D7^6D7C5625%%test.tpl.php on line 3 ■テンプレート(test.tpl) {$users[0] -> get_id()} ■テンプレートの呼び出し元(test.php) require_once("DB.php"); require_once("Smarty/libs/Smarty.class.php"); $o_smarty = new Smarty(); $o_smarty -> template_dir = "../templates"; $o_smarty -> compile_dir = "../templates_c"; $o_smarty -> debugging = TRUE; $db = DB::connect("mysql://*********************"); $objArray = User::getUserInfos($db); echo $objArray[0] -> get_id(); $o_smarty -> assign("users",$objArray); $o_smarty -> display("test.tpl"); class User { private $_id; public function get_id(){return $this -> _id;} public function set_id($_id){$this -> _id = $_id;} public static function getUserInfos($db){ ・・(中略)・・ } return $aryUsr; } }

    • ベストアンサー
    • PHP
  • SMARTYのエラーについて。について。

    今度業務でPHPをやる事になったので手始めにSmartyを使って簡単なアプリケーションを作ってみようと思ったのですが、最初の段階でいきなりつまづいてしましました。 具体的には、サンプルサイトからコピーした以下の様なphp&テンプレートを動かすと決まって次のエラーになります。 【/var/www/html/test/index.php】 <?php require_once('/var/www/smarty/libs/Smarty.class.php'); $smarty = new Smarty; $smarty->assign('name', 'test'); $smarty->display('index.tpl'); ?> 【/var/www/html/test/templates/index.tpl】 <html> <head> <title>User Info</title> </head> <body> 名前:{$name}<br> </body> 【エラー】 Warning: preg_match() [function.preg-match]: Compilation failed: repeated subpattern is too long at offset 18454 in /var/www/smarty/libs/Smarty_Compiler.class.php on line 454 ちなみに環境は以下の通りです。 OS:CentOS5.2 web:apache2.2.3 php:5.1.6 Smarty:2.6.21 同様の基本的なサンプルを他にもいくつか実行しましたが、結果は上記エラーと全く同一のものしか出力されません… 同じ症状が出て対応された方がいらっしゃいましたら回答の程よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpのthis

    a.phpを作成しました。 thisによるアクセスが可能かと思ったのですが、やはりできないのでしょうか。 ===a.php==== <?php $val = 1 ; method(); function method(){ echo $val; echo $this -> val; } ?> ===a.phpここまで===== 別のphpファイル(try.php)には以下内容を記述しました。 ===try.php=== <?php class User { private $id; public function get_id(){ return $this->id;} } public function set_id($id){ $this->id=$id; } ?> 質問: なぜ、 「try.phpでは、$idにthisでアクセスできるのでしょうか? (returnの違いかと思いましたが、set関数はreturnがないのでretrunでもないと思っています。) a.phpでは、thisで valにアクセスできないのでしょうか?」 try.phpは、classを付けてクラス作成しているから、$idにthisでアクセスできるのでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP