PHP は知っていますが、PHP のオブジェクト指向についてはあまり知りません。Joomla で作業していると、OO と MVC を使用する利点がわかり、その表示方法が気に入っています。しかし、これが OO の良い候補であるかどうかわからない状況に出くわすことがよくあります。これは、print_r として出力される JSON 文字列としての列車のスケジュールの例です。
PHP で OO を使用せずにスケジュールからさまざまな列車の停留所を抽出するために、ネストされた「foreach」を使用して、駅の出発時刻と到着時刻を取得します。
これは、環境 OO でオブジェクトとして扱うほうがうまくいくでしょうか? ネストされたすべての「foreach」ステートメントを使用せずにデータを取得して、より洗練されたプログラミング環境を作成するのが簡単になりますか? それとも、OO に切り替えても、このタスクが単純化されず、PHP コードがさらに読みやすくならないのでしょうか?
OO が最適だと思われる場合は、環境を改善するために以下の例を使用して PHP がどのように見えるかの例を挙げていただければ、最も役に立ちます。ありがとう!
stdClass Object
(
[ITEM] => Array
(
[0] => stdClass Object
(
[ITEM_INDEX] => 0
[SCHED_DEP_DATE] => 10:46:00 06/13/2013
[DESTINATION] => New York
[TRACK] => 2
[LINE] => AMTK
[TRAIN_ID] => A98
[STATUS] => ARRIVED
[BACKCOLOR] => yellow
[FORECOLOR] => black
[SHADOWCOLOR] => yellow
[GPSLATITUDE] => 40.7347
[GPSLONGITUDE] => -74.1644
[GPSTIME] => 6/13/2013 12:06:05 PM
[TRAIN_LINE] => Northeast Corridor Line
[STATION_POSITION] => 1
[LINEABBREVIATION] => AMTK
[INLINEMSG] =>
[STOPS] => stdClass Object
(
[STOP] => stdClass Object
(
[NAME] => New York Penn Station
[TIME] => 6/13/2013 12:26:11 PM
[DROPOFF] => Discharge Only
)
)
)
[1] => stdClass Object
(
[ITEM_INDEX] => 1
[SCHED_DEP_DATE] => 11:57:00 06/13/2013
[DESTINATION] => New York
[TRACK] => 1
[LINE] => AMTK
[TRAIN_ID] => A644
[STATUS] => in 2 Min
[BACKCOLOR] => yellow
[FORECOLOR] => black
[SHADOWCOLOR] => yellow
[GPSLATITUDE] =>
[GPSLONGITUDE] =>
[GPSTIME] => 6/13/2013 12:08:15 PM
[TRAIN_LINE] => Northeast Corridor Line
[STATION_POSITION] => 1
[LINEABBREVIATION] => AMTK
[INLINEMSG] => quiet car is in the rear.........thank you
[STOPS] => stdClass Object
(
[STOP] => stdClass Object
(
[NAME] => New York Penn Station
[TIME] => 6/13/2013 12:28:33 PM
)
)
)
[2] => stdClass Object
(
[ITEM_INDEX] => 2
[SCHED_DEP_DATE] => 12:09:00 06/13/2013
[DESTINATION] => Raritan
[TRACK] => 5
[LINE] => RARV
[TRAIN_ID] => 5423
[STATUS] => ALL ABOARD
[BACKCOLOR] => Orange
[FORECOLOR] => white
[SHADOWCOLOR] => black
[GPSLATITUDE] =>
[GPSLONGITUDE] =>
[GPSTIME] => 6/13/2013 11:23:37 AM
[TRAIN_LINE] => Raritan Valley Line
[STATION_POSITION] => 0
[LINEABBREVIATION] => RARV
[INLINEMSG] =>
[STOPS] => stdClass Object
(
[STOP] => Array
(
[0] => stdClass Object
(
[NAME] => Union
[TIME] => 6/13/2013 12:18:00 PM
)
[1] => stdClass Object
(
[NAME] => Roselle Park
[TIME] => 6/13/2013 12:21:30 PM
)
[2] => stdClass Object
(
[NAME] => Cranford
[TIME] => 6/13/2013 12:26:15 PM
)
[3] => stdClass Object
(
[NAME] => Westfield
[TIME] => 6/13/2013 12:30:15 PM
)
[4] => stdClass Object
(
[NAME] => Fanwood
[TIME] => 6/13/2013 12:34:30 PM
)
[5] => stdClass Object
(
[NAME] => Netherwood
[TIME] => 6/13/2013 12:37:45 PM
)
[6] => stdClass Object
(
[NAME] => Plainfield
[TIME] => 6/13/2013 12:40:45 PM
)
[7] => stdClass Object
(
[NAME] => Dunellen
[TIME] => 6/13/2013 12:45:30 PM
)
[8] => stdClass Object
(
[NAME] => Bound Brook
[TIME] => 6/13/2013 12:52:00 PM
)
[9] => stdClass Object
(
[NAME] => Bridgewater
[TIME] => 6/13/2013 12:54:45 PM
)
[10] => stdClass Object
(
[NAME] => Somerville
[TIME] => 6/13/2013 12:59:30 PM
)
[11] => stdClass Object
(
[NAME] => Raritan
[TIME] => 6/13/2013 1:10:00 PM
)
)
)
)
[3] => stdClass Object
(
[ITEM_INDEX] => 3
[SCHED_DEP_DATE] => 12:12:00 06/13/2013
[DESTINATION] => NY Penn -SEC
[TRACK] => 1
[LINE] => NJCL
[TRAIN_ID] => 3240
[STATUS] =>
[BACKCOLOR] => black
[FORECOLOR] => white
[SHADOWCOLOR] =>
[GPSLATITUDE] =>
[GPSLONGITUDE] =>
[GPSTIME] => 6/13/2013 11:47:35 AM
[TRAIN_LINE] => North Jersey Coast Line
[STATION_POSITION] => 1
[LINEABBREVIATION] => NJCL
[INLINEMSG] =>
[STOPS] => stdClass Object
(
[STOP] => Array
(
[0] => stdClass Object
(
[NAME] => Secaucus Upper Lvl
[TIME] => 6/13/2013 12:19:30 PM
)
[1] => stdClass Object
(
[NAME] => New York Penn Station
[TIME] => 6/13/2013 12:49:00 PM
)
)
)
)
[4] => stdClass Object
... etc.
PHPコードが次のようにならないように、回避またはより良い方法を見つけようとしています。
foreach ($destinations->ITEM as $key=>$destination) {
echo $destination->DESTINATION . "\t\t";
echo $destination->SCHED_DEP_DATE . "\n";
foreach ($destination->STOPS as $key_stops=>$value_stops) {
foreach ($value_stops as $key_stop=>$value_stop) {
echo $value_stop->NAME . "\t";
echo $value_stop->TIME . "\n";
}
}
echo "\n";
}
おそらく次のような、より直接的なもの: $arrival_time = $train_destination($station->$last_stop);
したがって、提案された関数は、これにアプローチするより良い方法です。