PHPのprivate関数について

このQ&Aのポイント
  • PHPのアクセス修飾子privateについて説明しています。
  • private関数はクラス内でのみ使用可能な関数であり、クラス外からは呼び出すことができません。
  • private関数は主にクラス内でのみ使用するための補助的な関数として利用されます。
回答を見る
  • ベストアンサー

PHPのprivate関数について

PHPのアクセス修飾子privateについてお聞きします。 以下のようなコードを書いて実行したら、エラーメッセージが出ました。 code: <?php class Super { protected function protectedFunc(){ echo "original-Protected\n\r"; } private function privateFunc(){ echo "Private\n\r"; } public function publicFunc(){ privateFunc(); } } $super = new Super; $super->publicFunc(); ?> error message: Fatal error: Uncaught Error: Call to undefined function privateFunc() in C:\xampp\htdocs\HTML_practice\protected-practice.php:12 Stack trace: #0 C:\xampp\htdocs\HTML_practice\protected-practice.php(17): Super->publicFunc() #1 {main} thrown in C:\xampp\htdocs\HTML_practice\protected-practice.php on line 12 line12 というのは、public 関数であるpublicFunc() の内側で、private関数のprivateFunc() を使おうとした部分ですが、private関数はクラス定義の中だから使えるというのは間違った認識でしょうか? だとするとprivate関数はいつどんな時に使えるのでしょうか? どなたか例を挙げて説明頂けないでしょうか? 宜しくお願いいたします。

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

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5086/13298)
回答No.1

public function publicFunc(){ $this->privateFunc(); } と書かなければいけません。 $this は自分自身のインスタンスを表す疑似変数です。 「$this->」が無いのでグローバル関数のprivateFunc()を探したけど見つからずエラーになっています。

papashiroSooke
質問者

お礼

早速にご回答を頂きまして、有難うございます。 そうですよね。私も習ったはずなのにすっかり忘れていました。 privateFunc()はあくまでもクラスのメンバーメソッドなので、オブジェクトのメンバーとして呼び出さないといけないわけですよね。 これですっきりしました。private修飾子を付けたメンバーでも、そのクラス内であれば使えるということを確認できました。

関連するQ&A

  • PHP の2つの関数について

    お世話になります。 ディレクトリー内の要素が、さらにディレクトリーなのかあるいはファイルなのかを検証する簡単なルーティンを作っていますが、この中で使っている2つの関数の働きが、自分が理解していたようにならないので質問させていただきます。 (1) str_replace() について ファイルエクスプローラーからpath としてコピーしてきたディレクトリーのパスは次のようになっています。 "C:\xampp\htdocs\PHP-practice\testDir" この中にあるバックスラッシュ "\" 記号を、str_replace() を使って "/" に変えようとしましたが、次のようになってしまいました。 $direct ="C:\xampp\htdocs\PHP-practice\testDir"; $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; 結果は: ========== C: mpp/htdocs/PHP-practice estDir つまり中ほどにあるものは変換されましたが、最初と最後は変換されず、しかも元のパスの一部が消えています。これはどうしたことなのでしょうか?これが最初の質問です。 しかし実際にはここで止まっている訳にいかないので、手作業で修正して先に進めました。 (2)readdir() について ディレクトリーの中をreaddir()で読んで、それがディレクトリーかファイルかを区別する簡単なコードですが、上手く行きません。 出力結果は次のように、ディレクトリーをファイルであると表示してきます。 ========== C:/xampp/htdocs/PHP-practice/testDir insideDir-1 is a file insideDir-2 is a file video1.mp4 is a file readdir() か is_dir()のいずれかの使い方がおかしいのでしょうか? これが2番目の質問です。 実際には testDir フォルダーの中身は以下の通りです。 testDir >> insideDir-1 >> new1.php >>insideDir-2 >> songPath.txt >> video1.mp4 以下に全体のコードを書きます。 <?php function read_directory($direct){ $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; $handle = opendir($direct); $entry = readdir($handle); $entry = readdir($handle);// skip . & .. while($entry = readdir($handle)){ if( is_dir($entry) ) { echo $entry." is a directory<BR>"; }else{ echo $entry." is a file<BR>"; } }// while closedir($handle); return; }// function // ================ main program ================ $dirname="C:/xampp/htdocs/PHP-practice/testDir"; //手作業修正済み read_directory($dirname); ?> どなたかよいアドバイスを頂ける方がいらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php 関数が定義されていない???

    いつも大変お世話になり誠にありがとうございます。 標記の件。 エラーメッセージは Fatal error: Uncaught Error: Call to undefined function getBlog() in C:\xampp\htdocs\detail.php:3 Stack trace: #0 {main} thrown in C:\xampp\htdocs\detail.php on line 3 です。 別のファイルで function getBlog($id) { if(empty($id)) { exit('idが不正です。'); と、getBlogという関数を使っています。 それを利用した、と言っています。 何故、3行目がエラーでしょうか? 度々申し訳ございません。 アドバイスの程、宜しくお願い申し上げます。      記 <?php require_once('dbc.php'); $result = getBlog($_GET['id']); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ詳細</title> </head> <body> <h2>ブログ詳細</h2> <h3>タイトル:<?php echo $result['title'] ?> </h3> <p>投稿日時:<?php echo $result['post_at'] ?></p> <p>カテゴリー:<?php echo setCategoryName($result['category']) ?></p> <hr> <p>本文:<?php echo $result['content'] ?></p> </body> </html>

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

    このファイルを実行した際に下記のようなエラーが出力されます。 Parse error: syntax error, unexpected '$yamada' (T_VARIABLE), expecting ',' or ';' in C:\xampp\htdocs\study.localhost\sample.php on line 30 何が原因でこのようなエラーが発生しているのでしょうか? 初心者で的外れな質問かもしれませんがよろしくお願います。 <?php class Employee { public $name; private $state = '働いている'; public function getState() { return $this->state; } public function setState($state) { $this->state = $state; } public function work() { echo '書類を整理しています'; } } ?> <?php $yamada = new Employee(); $yamada->job = 'プログラマ'; $yamada->name = '山田'; $yamada->setState('休憩している'); 30行目→echo $yamada->name,'さんは', $yamada->getState();

  • phpで関数の定義について <?php fun

    phpで関数の定義について <?php function say_hello(){ echo "hello world"."\n"; } say_hello(); echoというのはもともと関数ですよね? 関数を定義するとは、関数を新たに作るということですよね? この新たに作った、say_hello();という関数の中に echo "hello world"."\n";という関数を入れてあるということですか?

    • ベストアンサー
    • PHP
  • PHP のsetcookie()関数について

    PHP5を使ったHTML文書で、setcookie()関数を使っていますが、以下のようなメッセージが出てきてクッキーに新しいデータを書き込むことが出来ません。 環境はWindows10, IE11です。 PHP使用方法: $fname="mondai10.txt" setcookie("filename", $fname);  // line 38 setcookie("version",3); // line 39 メッセージ: Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\QAmondaiDisplay.php:3) in C:\xampp\htdocs\QAmondaiDisplay.php on line 38 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\QAmondaiDisplay.php:3) in C:\xampp\htdocs\QAmondaiDisplay.php on line 39 そしてこのクッキーを次のようにJavaScriptで読み込んでいるのですが、表示させてみると書き込んだものとは全く異なるものが表示されます。 JavaSript 使用法: var cookiedata = window.document.cookie; window.document.getElementById("q1").innerHTML =cookiedata;; 実際に表示されるもの: PHPSESSID=57c35633ffc2fe44622ee27e61bf44eb; filename=yasudaShiroexpires=Mon, 08 Oct 2018 21:44:48 GMT そしてこの表示は、最後の時間以外はいつも同じです。 どこに問題があるのでしょうか? 詳しい方、どうか教えてください。

    • ベストアンサー
    • PHP
  • PHP requireでのURLパラメータ指定

    PHPにてアクセスカウンターを作っているのですが、呼び出したときのパラメータにて合計カウント数、本日のカウント数、昨日のカウント数のどれを表示するのか分けるプログラムを作成しました。 直接アドレスバーにて、 http://localhost/counter/count.php?mode=total とパラメータ指定したときにはきちんと表示出来るのですが、他のPHPファイルから require ("./count.php?mode=total"); で呼び出すと、 Warning: require(./count.php?mode=total) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\counter\index.php on line 7 Fatal error: require() [function.require]: Failed opening required './count.php?mode=total' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\counter\index.php on line 7 というエラーが出てしまいます。 色々調べたところ、相対パス指定のときにはパラメータ指定が出来ないという情報があったので、絶対パスで指定してみたのですが、やはり上手くいきません。 Warning: require() [function.require]: http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\xampp\htdocs\counter\index.php on line 7 Warning: require(http://localhost/counter/count.php?mode=total) [function.require]: failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\counter\index.php on line 7 Fatal error: require() [function.require]: Failed opening required 'http://localhost/counter/count.php?mode=total' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\counter\index.php on line 7 というようにエラーが出てしまいます。 どのようにすれば上手く表示できるでしょうか? 是非回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpのエラーの原因について

    「つくって覚えるPHP入門」で勉強しているのですが、 本書の47ページ通りに実行したら ■お問い合わせ内容を確認してください。 お問い合わせタイトル: お問い合わせ内容詳細: Fatal error: Call to undefined function n12br() in C:\xampp\htdocs\check_inquiry.php on line 18 というエラーメッセージが出ます 何が間違ってるのかわからない状況です ご教授願います

    • ベストアンサー
    • PHP
  • PHPでサブクラスからスーパクラスのprivate

    メンバにアクセスできる件について PHPでスーパークラスで定義したprivateのメンバにサブクラスからアクセスできる件について 質問です。 class TestClass { private $value01 = "スーパークラスの private メンバ"; public function testMethod01 () { print "スーパークラスのパブリックメソッド"; print "<h1>{$this->value01}</h1>"; } protected function testMethod02(){ print "スーパークラスの protected メソッド"; } private function testMethod03(){ print "スーパークラスの private メソッド"; } public function getMethodList(){ print_r(get_class_methods($this)); } } class ExClass extends TestClass{ private $value01 = "サブクラスの private メンバ"; } $obj = new ExClass(); $obj-> testMethod01(); と上記のようにサブクラスのインスタンスから継承したpublicなメソッド testMethod01()を実行すると スーパークラスのprivateなプロパティにアクセスできてしまいます。 これってどういうことでしょうか?privateメンバってそのクラスの中からだけしかアクセスできませんよね? 上記では、サブクラスからアクセスしているような状態にみえますがどういうことでしょうか? ご教授御願い致します。

    • ベストアンサー
    • PHP
  • PHP の mail( ) 関数について

    お世話になります。 PHPのmail( )関数の使い方を練習しようと思い、以下に添付した簡単なスクリプトを試してみましたが、エラーが出ました。 スクリプト: <?php $address = 'my_address@yahoo.ca'; $subject = 'test mail'; $message = "Hello, I'm sending you an e-mail message.\r\n If you can read this. please let me know.\r\n"; $headers[] = "From: from@company.jp"; $headers[] = "Cc:sales@company.com"; $headers[] = "Content-type: text/html; charset=UTF-8"; $headers = implode("\r\n", $headers); $result = mail($address, $subject, $message, $headers, '-fmy_address@yahoo.ca'); if($result){ echo "message was sent<BR>"; } エラーメッセージ: Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\PHP-practice\email.php on line 9 ちなみに、エラーメッセージにある hp.ini の 関連個所は次のようになっています。 [mail function] ; For Win32 only. ; https://php.net/smtp SMTP=localhost ; https://php.net/smtp-port smtp_port=25 詳しい方がいらっしゃいましたら、自分のスクリプトの問題点と解決方法について、何かヒントでも頂けると有り難いです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでエラー

    PHPでMYSQLにデータを登録したいのですがデータを送信するとFatal error: Call to undefined function mysql_querty() in C:\xampp\htdocs\join\check.php on line 19と出てきて登録できません。 読んでいる本はよくわかるPHPの教科書でページ数は245ページです。どなたかわかる方お教え下さい!宜しくお願い致します!

    • ベストアンサー
    • PHP