PHPのclassで継承処理を行う際、例えばAクラスのpublic $aの変数へBクラスからアクセスすることは可能なんでしょうか
BクラスでAクラスのpublic $aを引数として用いたりとか
※各クラスはファイルを別々に作成してるという事で
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
可能です。
AはBのスーパークラスですよね?
基礎をちゃんと学んでください。
http://www.objective-php.net/basic/index/
というか、オブジェクト指向言語よりも、
まず手続型言語でちゃんとプログラムが組めるようになってから進んだほうがいいです。
プログラミングの基礎からやりましょう。
投稿2016/09/30 08:12
総合スコア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」の意味が分かれば、そういう疑問はキレイに解消します。
比喩で説明すると、こういうイメージです。
- 「public パブリック」は、継承に関係なく、どこからでもアクセスできます。
公園など公共の場には、誰でもアクセスできるのと同じです。
0. 「protected プロテクテッド」は、自身のクラスと、継承したクラスから使えます。
家族間の相続みたいな関係です。
0. 「private プライベート」は、そのクラス自身でしか使えません。
たとえば日記とか、個人情報のような秘密です。
こう並べてみると一見、publicが制限がなくて便利に見えますが、
オブジェクト指向の「カプセル化」、または「隠蔽」の原則に従えば、
必要がなければ、なるべくprivateにすることが推奨されます。
publicはグローバル変数と同じ、スコープが広すぎるデメリットがあるからです。
なぜ、そういうアクセス制御が必要なのかというと、
日常での個人の「プライベートの保護」と同じことです。
ふつう、部屋の扉の鍵を開けっ放しにしたり、
クレジットカードの番号を人に教えたりしませんよね。
それと同じで、データがいつのまにか勝手に変更されないように、
データを保護する意味の修飾子がprivateなのです。
投稿2016/09/30 09:04
編集2016/09/30 09:06総合スコア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
総合スコア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
総合スコア1613
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。