クラスについての疑問点とは?

このQ&Aのポイント
  • phpのクラスについて、データベースへの登録をクラスで行いたい場合、どのように書くべきか疑問に思っています。具体的には、クラスのメソッド内で$idという変数が出てくる場合、どのような意味を持つのかわかりません。また、クラスを呼び出す際には、引数として受け取る変数をどのように指定すれば良いのかもわかりません。
  • 例えば、insertの場合にはid、title、textのカラムに対応する引数を指定するのでしょうか?具体的な例を教えていただければ幸いです。
  • 初歩的な質問かもしれませんが、理解できる記事を見つけることができず、質問させていただきました。よろしくお願いいたします。
回答を見る
  • ベストアンサー

php クラスについて

普通にデータベースに登録はなんとか出来たので、クラスを作って登録をしてみようと色々なサイトを見て疑問点があり質問をさせて頂きました。 public function userContent($id) { } ここの$idというとこがわかりません。 if文などでは条件式を書くところなのでしょうがクラスでは何を書くべきなのでしょうか。 サイトによっては public function userContent($id) みたいに書いてないときもあります。 クラスを呼び出すページで $user = DB::connect()->userContent($_SESSION['id']); こうした場合()の中には受け取る変数を書いていくという認識でよろしいのでしょうか? 例えば、 insertの場合id,title,textのカラムがあれば クラスを呼び出すページ $user = DB::connect()->userContent($id, $title, $text); クラスを書くページ public function userContent($id, $title, $text) でinsertの内容を書いていく。 という認識で間違いないでしょうか? 初歩的すぎて中々記事が見つからずご質問させて頂きました。 よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

クラスのメソッドは、functionと書いているとおり関数です。なので引数で値を渡します。 http://www.php.net/manual/ja/language.oop5.basic.php http://www.php.net/manual/ja/functions.arguments.php >クラスを呼び出すページ >$user = DB::connect()->userContent($id, $title, $text); 書き方がヘンです $user = new DB(); でインスタンスを生成して $user->connect(); $user->userContent($id, $title, $text); ではないですか(connectはコンストラクタに含めるから要らないケースがほとんどですかね)。

milkkokoa94856
質問者

お礼

毎回素早い回答ありがとうございます。 実際に色々書いてみていてどこのサイトのサンプルだったか覚えてないのですが、動かない時にググってもでないのは書き方がおかしいからだったのですね(^^ゞ 書き方も含め毎回ためになるご指摘ありがとうございました。m(__)m またよろしくお願いいたします。(笑)

その他の回答 (1)

回答No.2

引数ですね。 他の方の言うとおりですが、おまけです。 hogehoge ( $param = null ) { if ($param===null) { /* 呼ぶ側で省略したときの処理 */   $param=DEFAULT_USER; /* とか */ return(1); /* エラーとするとか */ }  /* 本来の処理 */ } なんてこともできるので、略式もそれなりに使えます。

milkkokoa94856
質問者

お礼

なるほど、使いこなすと色々できるのですね。頑張って使いこなせるよう勉強します。ありがとうございました

関連するQ&A

  • PHP4でのSmarty派生クラスの定義について

    こんにちはよろしくお願いします。 PHP4でSmarty派生クラスを定義する方法を教えてください。 PHP5のサンプルコードで次のようなものがありました。 PHP4では,「private」が使えないらしいとか,「__construct」ではなくてクラス名がコンストラクタ名になるとかでうまくいかないようです。どのように修正すればよいのでしょうか? また,「__destruct」はどのようにすれば良いのでしょうか?コンストラクタ名とデストラクタ名が同じでよいのでしょうか? よろしくお願いします。 <?php require_once("DB.php"); require_once("Smarty/libs/Smarty.class.php"); class MySmarty extends Smarty { private $_db; public function __construct() { $this->Smarty(); $this->template_dir="../templates"; $this->compile_dir="../templates_c"; $this->_db=DB::connect("sqlite://localhost/samples.db"); } public function __destruct() { $this->_db->disconnect(); } public function getDb() {return $this->_db;} } ?>

    • ベストアンサー
    • PHP
  • php5のコンストラクタをphp4仕様に変えたいです。

    今日からつかえるPHP5サンプル集を使ってphpの練習をしています。 この中にDBを使った掲示板のサンプルがあり、DBの出入力をクラスファイルで行っています。 そのphp5の__constract()を使っている部分を、php4に対応した形にしようとして躓いています。 以下、コードです。一部編集しています。 【Article.class.php】 class Article { //*この部分を追加 function Article() { $this->__construct(); }// function __construct(){ /* コンストラクタ */ } var $_id; …中略 function getId(){return $this->_id;} …中略 function setId($id){$this->_id=$id;} …中略 function getArticleInfo($cnt,$num){ $aryArt=array(); $db=DB::connect("mysql~"); $rs=$db->query("SELECT * FROM bbs_master WHERE parent=0 ORDER BY sdat DESC LIMIT ".$cnt.",".$num); while($row=$rs->fetchRow(DB_FETCHMODE_ASSOC)){ $objArt=new Article(); $objArt->setId($row['id']); …中略 //*これ以下を実行するとieで"ページを表示できません。"が出る $aryTmp=Article::getChildArticleInfo($objArt->getId()); $objArt->setChild($aryTmp); $aryArt[]=$objArt; } return $aryArt; } function getChildArticleInfo($id){ …各記事の子記事を抽出するプログラム } return $aryArt; } } PEARの読み込みやDB接続は成功しているのは確認済みです。 上記コード中の再帰的にArticle::getChildArticleInfo($objArt->getId());を呼び出しているところで実行できなくなるようです。 これをphp4でも動作するように変更できないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで ”Call to a member function bind_param() ”が出る・・・

    PHPでアンケートサイトを作ろうとしていて、下のようなエラーが出て、どうしても前に進めません。 Fatal error: Call to a member function bind_param() on a non-object in /home/・・・・/aaa.php on line 5 サーバはロリポップを使っており、PHPはver.5.2.6 、SQLはバージョン4.0.24です。 ソースは以下のようになっています。 <?php require_once("DB.php"); $db=DB::connect("mysql://ユーザID:PASS@サーバ名/DB名"); $stt=$db->prepare("SELECT Title FROM master WHERE id=?"); $stt->bind_param("s",$_GET['id']); $stt->bind_result($Title); $stt->execute(); if($stt->fetch()!==TRUE){ print("登録されていません"); exit(1); } else{ 以下略 何が悪いのでしょうか?

    • ベストアンサー
    • PHP
  • document.titleというものがありますが、titleタグに付

    document.titleというものがありますが、titleタグに付ける名前を定義できると思うのですけど、 metaのkeywordsを定義するものはあるのでしょうか。 以下のようなtitleを付ける為の仕組みがあります。 そのscript箇所に、 document.title = "<!--{$title_text}-->" + "|" + document.title; と同じような仕組みで、keywordsを定義する事はできませんでしょうか? どなたかご教示いただけると幸いです。 <!--{php}--> $db_connect = false; $sql_category = "SELECT category_id,category_name,parent_category_id FROM dtb_category WHERE category_id = "; $db = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD); //mysql_query("SET NAMES utf8"); if(mysql_select_db(DB_NAME, $db)) $db_connect = true; $title_text = ''; if ($db_connect) { $sql = $sql_category.$_GET['category_id']; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); mysql_free_result($result); $title_temp = $row['category_name']; while ($row['parent_category_id'] != 0) { $sql = $sql_category.$row['parent_category_id']; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); mysql_free_result($result); $title_text = $row['category_name']; } if ($title_text != '') $title_text = $title_text." | ".$title_temp; else $title_text = $title_temp; } $this->assign("title_text", $title_text); <!--{/php}--> <script type="text/javascript"> //<![CDATA[ function setEventListener(el, evt, func) { if (el.addEventListener) el.addEventListener(evt, func, false); else el.attachEvent("on"+evt, func); } function html_load() { document.title = "<!--{$title_text}-->" + "|" + document.title; } setEventListener(window, 'load', html_load); //]]> </script>

  • こんにちは、PHP初心者です。

    こんにちは、PHP初心者です。 Smartyを利用してWebサイトを構築中です。 Smarty.classの派生クラスを作成し、コンストラクタ内でDB接続オブジェクトをprivateプロパティ($_db)に設定しているのですが,query文のところでエラーSELECT * FROM books [nativecode=1046 ** No database selected]となります。ためしにコンストラクタ内でクエリを実行したところテーブルから値を取得できました。なぜコンストラクタ外に出るとエラーになるのかわかりません。どなたかご教示ください。どうぞよろしくお願いします。 下記ソースです。 =====派生クラス======================= <?php $user = "dbuser"; $pass = "dbpassword"; $name = "mobilephp"; $host = "localhost"; require_once("DB.php"); require_once("Smarty/libs/Smarty.class.php"); class MySmarty extends Smarty { private $_db; public function __construct() { $this->Smarty(); $this->template_dir="../templates"; $this->compile_dir="../templates_c"; $this->_db=DB::connect("mysql://$user:$pass@$host/$dbname"); } public function __destruct() { $this->_db->disconnect(); } public function get_db() {return $this->_db;} } ?> ======end===================================== ==========メインのPHP=================================== <?php require_once("../MySmarty.class.php"); $o_smarty=new MySmarty(); $db=$o_smarty->get_db(); $stt=$db->query("SELECT * FROM books");←ここでエラーになる $data=array(); while($row=$stt->fetchRow(DB_FETCHMODE_ASSOC)){ $data[]=array("isbn"=>$row['isbn'],"title"=>$row['title'], "publish"=>$row['publish'],"price"=>$row['price']); } $o_smarty->assign("data",$data); $o_smarty->display("structure.html"); ?>

    • ベストアンサー
    • PHP
  • PHPからMySQL・異なるDBにコピー

    PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。

    • ベストアンサー
    • PHP
  • PHPとflashの連携

    いつもお世話になっております。 PHPとflashの連携について質問させていただきます。 1)flashでログインページを作成し、formデータをPHPへ送信 2)login.phpでユーザの認証を行い、セッションにユーザIDを登録し、XMLデータでflashに返す。 3)test.phpでセッションにユーザIDの登録があるか調べ、なければリダイレクト あれば、処理続行(別のXMLデータを返す)。 上記のような処理を行う場合、どのように実装したらよろしいでしょうか。 現状ですと、(1)はできています。 login.phpでセッションにユーザIDを登録するのですが、セッションを破棄していないのにtest.phpではセッションがなくなってしまいます。 よろしくご教示お願いいたします。

    • ベストアンサー
    • PHP
  • 以前、こちらの質問サイトで質問した際に回答を頂いた内容で、

    以前、こちらの質問サイトで質問した際に回答を頂いた内容で、 Smartyの .tpl ファイルなどに、<?php?>。。。<?/php?>を書き、Javascriptで表示させるというやり方がありました。 回答は別の所から、案を頂き、 function html_load(){ document.title = "<!--{$title_text}-->" + "|" + document.title;   keyword_write($keyword); } を function html_load(){ document.title = "<!--{$title_text}-->" + "|" + document.title;   keyword_write("<!--{$keyword}-->"); } としました。 以下、全文。 <!--{php}--> $db_connect = false; $sql_category = "SELECT category_id,category_name,parent_category_id FROM dtb_category WHERE category_id = "; $db = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD); //mysql_query("SET NAMES utf8"); if(mysql_select_db(DB_NAME, $db)) $db_connect = true; $title_text = ''; $keyword = '';  //←追記 if ($db_connect){ $sql = $sql_category.$_GET['category_id']; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); mysql_free_result($result); $title_temp = $row['category_name']; while ($row['parent_category_id'] != 0){ $sql = $sql_category.$row['parent_category_id']; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); mysql_free_result($result); $title_text = $row['category_name']; } if ($title_text != '') $title_text = $title_text." | ".$title_temp; else $title_text = $title_temp; } $this->assign("title_text", $title_text); $this->assign("keyword", $title_text);  //←追記 <!--{/php}--> <script type="text/javascript"> //<![CDATA[ function setEventListener(el, evt, func){ if (el.addEventListener) el.addEventListener(evt, func, false); else el.attachEvent("on"+evt, func); } function html_load(){ document.title = "<!--{$title_text}-->" + "|" + document.title;   keyword_write("<!--{$keyword}-->"); } function keyword_write(keyword){  var meta=document.getElementsByTagName("meta");  for(var i=0;i<meta.length;i++){  if(meta[i].name=="keywords")   meta[i].setAttribute("content",meta[i].getAttribute("keyword")+","+keyword);  } } setEventListener(window, 'load', html_load); //]]> </script> そこで、EC-CUBEの環境で、setAttribute、getAttributeが使えないので、 他の方法を教えていただきたく

  • [PHP]子クラスに独自の実装をする

    現在子クラスに独自の実装をしていくという学習をしています。 親クラス Post を継承する子クラス showSponsor を作成してみました。 子クラスのコンストラクタの引数に親クラスのプロパティ'$text'、と子クラスで 新たに作成した'$sponsor'を入れました。 その後、newで新しく作った'showSponsor 'のインスタンスを作りました。 スポンサー名は'Yahoo'としてみました。 $posts[2] = new SponsoredPost('hello hello', ’Yahoo'); その後、同様に新しく作成した ’showSponsor()’ メソッドを表示するために $posts[2]->showSponsor(); を追加しました。 この記述で実行すると "Warning: Use of undefined constant ’Yahoo’ - assumed '’Yahoo’' (this will throw an Error in a future version of PHP) in C:\xampp\htdocs…" と出ます。「'Yahoo'という定義されていない定数を使っている」というような意味かと思います。 子クラスである'SponsoredPost'内の sponsoreのどこかにミスがあるのでしょうか? エラー行はコード内に記述したある $posts[2] = new SponsoredPost('hello hello', ’Yahoo'); の部分です。 表示結果では一応’Yahoo’の文字出ていますが、 ' (シングルクォート) も一緒についています。文字列ということを表すためにつけたものです。 初学者の自分にはエラーの原因がわかりません。 もしエラーの原因がわかる方いらっしゃいましたら教えてください。 宜しくお願い致します。 ------------------------------------ <?php class Post { private $text; public function __construct($text) { $this->text = $text; } public function show() { printf('%s',$this->text); } } class SponsoredPost extends Post { private $sponsor; public function __construct($text, $sponsor) { parent:: __construct($text); $this->sponsor = $sponsor; } public function showSponsor() { printf('%s', $this->sponsor); } } $posts=[]; $posts[0] = new Post('hello'); $posts[1] = new Post('hello again'); //★エラー行 $posts[2] = new SponsoredPost('hello hello', ’Yahoo'); $posts[0]->show(); echo "<br>"; $posts[1]->show(); echo "<br>"; echo "<br>"; $posts[2]->show(); echo "<br>"; $posts[2]->showSponsor(); ------------------------------------

    • ベストアンサー
    • PHP
  • phpでMysqlを複数扱う方法・接続方法

    説明がわかりにくくなってしまうかもれないのですが、引き続き釣りのコミュニティサイトのようなもの作っており先ほど画像に関しての質問をここで解決したのですがさらに別問題が。 プロフ画像などを予定しておりましが一緒に釣った魚などもアルバムのようにみんなで保存しておく環境をつくろうと思ったのですが容量がいっぱいになる問題が怖いです。 そんなすぐにいっぱいになることはないと思うのですが、スマホでとってそのままアップするなど元サイズの容量がおおきくなってしまうとおもい、ついでに複数扱う方法を勉強しようとおもったしだいであります。 環境MYSQL DB1情報 ホスト test1.sql.cd DB名 demo1 ID admin1 パス pass1 DB2情報 ホスト test2.sql.cd DB名 demo2 ID admin2 パス pass2 このようにホスト名・データベース名などすべてが違う場合、その度にファイルを読み込んだりするのでしょうか? 現在 『config.php』DB_NAMEなどを書いているファイル 『sample.php』 private function __construct() { $pdo = new PDO( // DSN (Data Source Name) sprintf('mysql:dbname=%s;host=%s;charset=utf8', DB_NAME, DB_HOST ), DB_USER, DB_PASS, ); } 『index.php』 try { $user = DB::connect()->userProfile($id); } catch (Exception $e) { // エラーページに遷移 error_page($e); } このような感じで作っています。 分からない点 上記のように順番に読み取り各ページで呼び出しているのですが『sample.php』をもう一つ『sample2.php』というふうに作り同じように書いていけば使えるものなのでしょうか? また、その場合sample.phpとsample2.phpを常に読み込んでいる状態になるのでしょうか? そうなると処理速度などどうなのかなとか思ってしまいます。 sample.phpのプロフィールIDとsample2.phpの画像を一致したもの呼び出すのは統合(今回はホストも違うから外部統合?)で出来ると調べたのですが常に接続状態になるのかなど、やり方的にあっているのか不安でご質問させて頂きました。 そもそもつないでいるのは $user = DB::connect()->userProfile($id); などアクションを要求した際におこるのか、毎回すべてのファイルを読み込みアクションが要求されたら処理の部分を読み込むのか理解していません。 アクションを起こした際に読みに行くなどなら問題なくやればいいと思うのですが、いかがなのでしょうか? ご質問がわかりにくくなってしまって申し訳ございませんが、よろしくお願いいたします。

    • ベストアンサー
    • PHP