質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

5回答

1673閲覧

PHP classの継承

a-_.

総合スコア133

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/09/30 07:49

編集2016/09/30 07:50

PHPのclassで継承処理を行う際、例えばAクラスのpublic $aの変数へBクラスからアクセスすることは可能なんでしょうか

BクラスでAクラスのpublic $aを引数として用いたりとか

※各クラスはファイルを別々に作成してるという事で

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

可能です。
AはBのスーパークラスですよね?

基礎をちゃんと学んでください。
http://www.objective-php.net/basic/index/

というか、オブジェクト指向言語よりも、
まず手続型言語でちゃんとプログラムが組めるようになってから進んだほうがいいです。
プログラミングの基礎からやりましょう。

投稿2016/09/30 08:12

jm1156

総合スコア866

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

遠回りでも面倒でも、急いで仕上げたくても、
ちゃんと php.net のドキュメントを一読してから取り組んだほうがいいと思います。

PHP: クラスとオブジェクト - Manual
http://php.net/manual/ja/language.oop5.php

PHP: アクセス権 - Manual
http://php.net/manual/ja/language.oop5.visibility.php

public 宣言されたクラスのメンバーには、どこからでもアクセス可能です。 protected 宣言されたメンバーには、 そのクラス自身とそのクラスを継承したクラスからのみアクセスできます。 private 宣言されたメンバーには、そのメンバーを定義したクラスからのみアクセスできます。

PHP: オブジェクトの継承 - Manual
http://php.net/manual/ja/language.oop5.inheritance.php

サブクラスは親クラスから public と、protected のメソッドをすべてを引き継ぎます


ドキュメントを読むのが面倒なのであれば、学習サイトの類を活用するのも手です。

初心者でもほぼ無料でPHPを勉強できるコンテンツ11選 - paiza開発日誌
http://paiza.hatenablog.com/entry/2015/03/17/%E5%88%9D%E5%BF%83%E8%80%85%E3%81%A7%E3%82%82%E3%81%BB%E3%81%BC%E7%84%A1%E6%96%99%E3%81%A7PHP%E3%82%92%E5%8B%89%E5%BC%B7%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%8410%E9%81%B8

投稿2016/09/30 11:46

編集2016/09/30 11:49
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

アクセスすることは可能なんでしょうか

可能、という回答はすでに出ているので、考え方を説明しますね。
「public」の意味が分かれば、そういう疑問はキレイに解消します。


比喩で説明すると、こういうイメージです。

  1. public パブリック」は、継承に関係なく、どこからでもアクセスできます。

公園など公共の場には、誰でもアクセスできるのと同じです。
0. 「protected プロテクテッド」は、自身のクラスと、継承したクラスから使えます。
家族間の相続みたいな関係です。
0. 「private プライベート」は、そのクラス自身でしか使えません。
たとえば日記とか、個人情報のような秘密です。


こう並べてみると一見、publicが制限がなくて便利に見えますが、
オブジェクト指向の「カプセル化」、または「隠蔽」の原則に従えば、
必要がなければ、なるべくprivateにすることが推奨されます。
publicはグローバル変数と同じ、スコープが広すぎるデメリットがあるからです。

なぜ、そういうアクセス制御が必要なのかというと、
日常での個人の「プライベートの保護」と同じことです。

ふつう、部屋の扉の鍵を開けっ放しにしたり、
クレジットカードの番号を人に教えたりしませんよね。

それと同じで、データがいつのまにか勝手に変更されないように、
データを保護する意味の修飾子がprivateなのです。

投稿2016/09/30 09:04

編集2016/09/30 09:06
LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

可能です。

以下のように、クラスMusukoが親クラスOyajiのクラス変数を参照出来ます。

PHP

1class Oyaji { 2 public $creditCard; 3 private function pay() { 4 return $this->creditCard; 5 } 6} 7 8class Musuko extends Oyaji{ 9 private function pay() { 10 return $this->creditCard; 11 }

ファイルが別々になっている場合、Musukoクラスの方でrequire_once('Oyaji.php');のような記述が必要ですが。

投稿2016/09/30 08:24

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

public と protected なら OK で、private はダメみたいですね。

php

1vagrant@svrctl:~/test$ cat -n a.php 2 1 <?php 3 2 class A { 4 3 public $a; 5 4 protected $b; 6 5 private $c; 7 6 function set() { 8 7 $this->a = 1; 9 8 $this->b = 2; 10 9 $this->c = 3; 11 10 } 12 11 } 13 12 class B extends A { 14 13 function get() { 15 14 $this->set(); 16 15 printf("\$a=%s\n", $this->a); 17 16 printf("\$b=%s\n", $this->b); 18 17 printf("\$c=%s\n", $this->c); 19 18 } 20 19 } 21 20 $x = new B; 22 21 $x->get(); 23vagrant@svrctl:~/test$ php a.php 24$a=1 25$b=2 26PHP Notice: Undefined property: B::$c in /home/vagrant/test/a.php on line 17 27PHP Stack trace: 28PHP 1. {main}() /home/vagrant/test/a.php:0 29PHP 2. B->get() /home/vagrant/test/a.php:21 30$c=

詳細はこのあたりで
http://php.net/manual/ja/language.oop5.visibility.php

投稿2016/09/30 08:06

hotta

総合スコア1613

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問