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

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

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

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

Q&A

解決済

2回答

14541閲覧

PHP 継承している親クラスの更に親クラスを呼び出す方法

japanese_ninja

総合スコア196

PHP

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

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

0グッド

1クリップ

投稿2014/07/17 02:49

PHPのクラスコンストラクタで、親の親コンストラクタ(祖父?)を呼び出す方法を探しています。
それも、親コンストラクタを呼び出すことなくできるやり方です。

`
class GrandFather
{
public function __construct()
{

}

}

class Father extends GrandFather
{
public function __construct()
{
parent::__construct();
}
}

class Me extends Father
{
public function __construct()
{
// ここで「祖父」を呼びたい
}
}
`

おかしな質問だとは思うのですが(> <)
ややこしいことをやりたいというわけでもなく、ただ興味がありまして・・・

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

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

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

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

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

guest

回答2

0

親コンストラクタに、その親のコンストラクタを呼び出す記述を書けばよいと思います。
あまりよい手段ではないかもですが、Fatherコンストラクタにフラグを渡して分岐させたらどうでしょうか?
`

<?php class GrandFather { public function __construct() { } } class Father extends GrandFather { public function __construct($flag) { if (!$flag) { // 何らかの処理 } else { // 祖父コンストラクタ呼び出し parent::__construct(); } } } class Me extends Father { public function __construct($flag = false) { parent::__construct($flag); } } `

投稿2014/07/18 02:30

emperor

総合スコア427

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

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

japanese_ninja

2014/08/07 05:51

回答ありがとうございました!試してみようと思います!
guest

0

ベストアンサー

コンストラクタを__constructではなく、クラス名で宣言すれば実現可能です。
以下サンプルコード。

`

<?php /** * おばあちゃんクラス */ class Grandma { public function Grandma() { echo "おばあちゃんです\n"; } } /** * おかあさんクラス */ class Mother extends Grandma { public function Mother() { echo "おかあさんです\n"; } } /** * こども1クラス */ class Child1 extends Mother { public function Child1() { // おかあさんのコンストラクタを呼びます parent::Mother(); // 別の呼び方もしてみます parent::__construct(); } } /** * こども2クラス */ class Child2 extends Mother { public function Child2() { // おばあちゃんのコンストラクタを呼びます parent::Grandma(); } } echo "こども1:\n"; new Child1(); // "おかあさんです"が2回表示されます echo "こども2:\n"; new Child2(); // "おばあちゃんです"が1回表示されます ?>

`

投稿2014/07/23 06:20

nak

総合スコア696

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

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

japanese_ninja

2014/07/24 04:18

ありがとうございました!まさしくこのようなやり方が知りたかったです!
nak

2014/07/30 04:04

コメントありがとうございます! お役に立てたようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問