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

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

ただいまの
回答率

90.34%

  • PHP

    21273questions

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

クラス化、一つ目のfunctionを受けて二つ目のfunctionを処理する

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 199

hamadakana

score 2

<?php

class hoge{

    public $data;


    public function __construct(){
        $this->data=array(
            'RT' => array(0,1,1,0,0,1,1,0,0),
            'YN' => array(0,0,1,1,0,0,0,0,0),
            'KY' => array(0,0,0,0,0,0,0,0,0),
            'KH' => array(0,0,0,1,1,0,0,0,0),
            'MM' => array(0,0,0,0,0,0,0,0,0));
}
  public function setReserve($start,$course_time,$tanto){

    //function作成
$point=$start-10;
//起点を決める
$yoyaku=array_slice($this->data[$tanto],$point,$course_time);
//var_dump($yoyaku);

$han=1;

if(in_array($han,$yoyaku)){
    echo '予約追加できませんでした…';
}
else
{
$yoyaku2=str_replace(0,1,$yoyaku);
//var_dump($yoyaku2);
$yoyaku3=array_splice($this->data[$tanto],$point,$course_time,$yoyaku2);
//var_dump($yoyaku3);
//var_dump($data);
//$data1=$data;
//var_dump($data);

$data1=$this->data;

echo '予約追加できました!';
//var_dump($data1);
}
}



public function isTanto($start,$corse_time,$tanto){
    //function
$point = $start-10;
//$pointを作成 起点を決める
//echo $point;
$yoyaku=array_slice($this->data1[$tanto],$point,$corse_time);
//配列をとりだす

$yoyaku2 = array_sum($yoyaku);
//取り出した配列を加算する
if ( $yoyaku2== 0){
//もし0ならば
echo 'KY is BUSY';
}else{
    //それ以外
    echo 'KY is OK';

}

}


}

$obj = new hoge();
$obj->setReserve(12,2,'KY');
$obj->isTanto();

クラス化を行いたいです。
クラスの中にfunctionが二つあり、一つ目のfunctionで処理した結果を二つ目のfunctionで利用する方法がわかりません。
もともとグローバル変数を利用していたがグローバル変数の使用が禁止されてしまっためその他の方法を探しています。
$dataをsetReserveで処理し$data1に中身を書き換えたものをisTantoで処理したいという流れです。
ご協力をお願いします。

<?php

class First{

    public $data; 
    public function __construct(){
        $this->data=array(
            'RT' => array(0,1,1,0,0,1,1,0,0),
            'YN' => array(0,0,1,1,0,0,0,0,0),
            'KY' => array(0,0,0,0,0,0,0,0,0),
            'KH' => array(0,0,0,1,1,0,0,0,0),
            'MM' => array(0,0,0,0,0,0,0,0,0));
}
  public function setReserve($start,$course_time,$tanto){

    //function作成
      $point=$start-10;
//起点を決める
    $yoyaku=array_slice($this->data[$tanto],$point,$course_time);
//var_dump($yoyaku);

    $han=1;

if(in_array($han,$yoyaku)){
    echo '予約追加できませんでした…';
    return $this->data;
}
else
{
$yoyaku2=str_replace(0,1,$yoyaku);
//var_dump($yoyaku2);
global $yoyaku3;
$yoyaku3=array_splice($this->data[$tanto],$point,$course_time,$yoyaku2);
//var_dump($yoyaku3);
//var_dump($data);
//$data1=$data;
//var_dump($data);
$data1=$this->data;


echo '予約追加できました!';
return $data1;
}
}
}


//$obj= new First();
//$obj->setReserve(12,2,'KY');


class Next extends First{
    function getTanto($start2,$course_time2,$value_array2){
        //functionを作成する
        $point2 = $start2-10; 
        //起点を決める
        foreach($value_array2 as $key => $youso){
        //繰り返し処理
        $yoya = array_slice($value_array2[$key],$point2,$course_time2);
        //該当時間を切り出す
        //var_dump($yoyaku);
        if ( array_sum($yoya)== 0 ){
        //足して
            //もし0ならば$keyを$retに代入する
        $ret[]=$key;
        //出てきた担当者を配列に入れていく
         //  var_dump($ret);
        }
        }
        foreach($ret as $value){
            echo $value;
        }
        //functionを$retで返す
        }
    }




$comb= new Next();
$value_array2 = $comb->setReserve(12,2,'KY');
$comb->getTanto(12,2,$value_array2);


コード


上記のものが出来ないのをうけて承継形式で作り変えてみたのですが、
それでは関数の利用と変わらないとの指摘を受けてしまい、苦戦しているところです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/07/04 16:54

    Eclipseとか使えばいいのに・・・。 PHPコード整形サービス:http://flatsystems.net/php_beautifier.php

    キャンセル

  • mts10806

    2018/07/04 16:55

    global禁止されたという割りに使ってしまってますけど。

    キャンセル

  • mts10806

    2018/07/04 16:58

    コードを読んで要件を把握するのは全くの他人しかいないQAサービス上では無理と思ってください。このコードを作成することになった背景を含めて要件を具体的に正確に書いてください。

    キャンセル

回答 1

0

最初のコードに
public $data1;を追加してglobal $data1;を削除、その直後を$this->data1=$this->data;に変更するだけで良さそうだけど違うんですかね?
出力結果:予約追加できました!KY is OK

どういう要件でどういう結果を求めているかサッパリなので、ひとまずエラーなくして整えただけですけど。

これで解決しても質問者さんのオブジェクト指向への理解は深まりそうにないので、
もう少し本当に基本のキからPHPマニュアルなど読まれた方がより有用かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    21273questions

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