この間の続き
lunch
privateとしてしまうと同じクラス(class Lunch{})内からしか呼び出せない
コンストラクタもpublic
いま全体が
class Lunch{}であり、
そのなかに
public function __construct(){}や
public function getAllMenu(){}がある
内部とは
class Lunch{}のこと
エラーが出ましたがここ
$rows = $rs->fetchAll(PDO::FETCH_ASSOC);
$rs->が抜けているとフェイタルが出た
じゃメニューの名前だけを出力する
連想配列に入っているはず
なぜかfor文をかきつつif-endifをしていたりした
$iを回す回数は
$i<count($arr)
list.php
<?php
require_once("class/lunch.class.php");
$obj = new Lunch();
$arr = $obj->getAllMenu();
//print_r($arr);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ニューリスト</title>
<link rel="stylesheet" href="css/style.css">
<script src="../jquery-3.4.1.min.js"></script>
</head>
<body>
<div id="container">
<h1>new list</h1>
<ul id="m_list">
<!--方法1一番外側の階層([0~20])をぐるぐる回すよ、その中身をvalとするよ-->
<?php foreach($arr as $val): ?>
<li><?php echo $val["menu"]; ?></li>
<?php endforeach; ?>
<!--方法2 count関数を使うよ
<?php for($i=0; $i<count($arr); $i++): ?>
<li><?php echo($arr[$i]["menu"]); ?></li>
<?php endfor ?>
-->
</ul>
</div>
<script src="js/lunch.js"></script>
</body>
</html>
lunch.class.php
<?php
class Lunch{
private $pdo;//外から直接アクセスはできないように
public function __construct(){//コンストラクタ。初期化されたときに動く
// -----------------
//環境によって変更
// -----------------
$host="localhost";
$dbuser="root";
$dbpass="";
$dbname="lunch";
// -----------------
$dsn = "mysql:host={$host}; dbname={$dbname}; charset=utf8";
$this->pdo=new PDO($dsn,$dbuser,$dbpass); //$pdoとは書かない
}//constructの終わり
public function getAllMenu(){//publicでないと外から呼び出せない
$sql = "SELECT * FROM foods";
$rs = $this->pdo->query($sql);
$rows = $rs->fetchAll(PDO::FETCH_ASSOC);
return $rows;//戻り値
}
}
?>
メソッドはあまり複雑にせず
1つのことだけをやらせる
値を取るだけとかにするといい