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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

1回答

436閲覧

collectionオブジェクトについて

toll_tree

総合スコア199

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

1グッド

0クリップ

投稿2019/06/01 10:52

編集2019/06/04 06:38

laravelを学習中の者です。
以下のコードにつきまして、お聞きしたい部分があります。
以下はビュー部分の「index.blade.php」です

php

1@extends('layouts.helloapp') 2 3@section('title','Person.index') 4 5@section('menubar') 6 @parent 7 インデックスページ 8 9@endsection 10 11@section('content') 12 <table> 13 <tr><th>Data</th></tr> 14 @foreach ($items as $item) 15 16 <tr> 17 <td>{{$item}}</td> 18 <td>{{$item->getData()}}</td> 19 </tr> 20 @endforeach 21 </table> 22@endsection 23 24@section('footer') 25copyright 2017 tuyano. 26@endsection

以下は、モデルクラスである「Person.php」です

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Person extends Model 8{ 9 public function getData() 10 { 11 return $this->id . ':' . $this->name . '(' . $this->age . ')'; 12 } 13 14} 15

以下はコントローラー部分である、「PersonController.php」です

php

1<?php 2 3namespace App\Http\Controllers; 4use App\Person; 5use Illuminate\Http\Request; 6 7class PersonController extends Controller 8{ 9 public function index(Request $request) 10 { 11 $items = Person::all(); 12 // if($items instanceof Person){ 13 // die('ok'); 14 // }else{ 15 // die('ng'); 16 // } 17 18 // var_dump(get_object_vars($items)); 19 // exit(); 20 return view('person.index',['items' => $items]); 21 22 } 23} 24

以下はルート部分である、web.phpです

php

1<?php 2 3/* 4|-------------------------------------------------------------------------- 5| Web Routes 6|-------------------------------------------------------------------------- 7| 8| Here is where you can register web routes for your application. These 9| routes are loaded by the RouteServiceProvider within a group which 10| contains the "web" middleware group. Now create something great! 11| 12*/ 13 14 15// Route::post('hello','HelloContoroller@post'); 16 17//use App\Http\Middleware\HelloMiddleware; 18 19Route::get('hello/add','HelloController@add'); 20Route::post('hello/add','HelloController@create'); 21 22Route::get('hello','HelloController@index'); 23 24Route::get('hello/edit','HelloController@edit'); 25Route::post('hello/edit','HelloController@update'); 26 27Route::get('hello/del','HelloController@del'); 28Route::post('hello/del','HelloController@remove'); 29Route::get('hello/show','HelloController@show'); 30Route::get('person','PersonController@index'); 31Route::get('test','HelloController@foo'); 32

上記、http://localhost/personとアクセスしますと以下の画面が表示されます。
イメージ説明
お聞きしたい部分なのですが、index.blade.php内の「$item」が何故getDataを呼び出せるのか、といった点です。
$items = Person::all()にて、全レコードをCollectionインスタンスとして得られる所までは理解できますが、何故、getDataメソッドが呼ぶことができるのでしょうか?
求める回答が得られないと判断した為、スタックオーバーフローの方にも投稿しました。
投稿したサイト

newyee👍を押しています

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

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

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

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

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

m.ts10806

2019/06/01 11:15 編集

メソッドの確認の仕方はご自身の別質問で回答ついてるので重複質問ですよ。 それにcollectionオブジェクトと分かってるならcollectionの仕様を確認したらわかる話ですし。マニュアル読んで分からなければコアソース読めばわかる話で。
toll_tree

2019/06/04 06:29

マルチポストって禁止なんです?
toll_tree

2019/06/04 06:34

理由かけば良いんですね
m.ts10806

2019/06/04 06:39

「推奨はしていません。」は禁止と同等です。「推奨されない質問」と同じ。書けるからやっていいという意味ではないです。 取り扱うのが不適当(サイト運営上迷惑)という意味。 「やむを得ず」のところを自身の都合の良いように置き換えていてはルールを理解したとは言えません。 そういう人はおおよそ、また同じことをやります。
guest

回答1

0

$itemsPerson classのインスタンスが複数ある変数(Collection)なので、$items から取り出した $item Person classで定義されている getData() が呼び出せます!

投稿2019/06/01 15:06

t_kusakabe74

総合スコア549

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

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

toll_tree

2019/06/01 15:13

ご回答ありがとうございます。 自分の認識としましては、Person::all()メソッドにより全レコードを格納したインスタンス($items)が作成されることは理解できるのですが、何故Personクラスで定義した、getDataメソッドも呼び出すことができるのか...といった点が分からないのですよね
t_kusakabe74

2019/06/01 15:33

これはオブジェクト指向の話になるのですが、phpは `public function ...` と書くとインスタンスメソッドになります! `$item` は `Person` のインスタンスなので `getData()` が使える、といったイメージですね。 インスタンスメソッドの話は以下がわかりやすいと思います! http://www.objective-php.net/basic/instance
toll_tree

2019/06/01 15:38

なんとなくイメージが掴めてきたかもしれません! もしかして、自分はPerson:all()でレコードの情報のみが入ったオブジェクトのインスタンスが作成されたと思っていたのですが、そうではなくPersonクラスも継承していて、getDataメソッドも使えるといった感じなのでしょうか?
t_kusakabe74

2019/06/01 17:05

`Person` classを継承、というまた意味が違ってきます。。。 オブジェクト指向において継承とは、あるclassを引き継いで別のclassをつくったり。。。みたいなイメージで使ったりします!(https://www.sejuku.net/blog/9598) よく言われるのはclassは設計図でインスタンスは設計図を基に作った モノ と表現されたりします。 今回で言うと設計図は `Person` classで モノ は `$item` になります。 設計図(`Person` class)には、 `getData()` というmethodが定義されているので、設計図を基に作られた `$item` は `getData()` が使える、みたいなイメージです!
toll_tree

2019/06/02 02:38

僕自身、$items = Person::allでは、全レコード情報のみが$itemsに格納されると、思いこんでいたのですが、Personクラスで定義されていた、メソッドも使用できるということなんですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問