PHP(二日目)

 

function sayHi($name) {
$lang = "php";                                                                   - 変数にphpを代入
echo "hi! $name from $lang";
}

sayHi("Tom");
var_dump($lang);

$x = 5.6;
//echo ceil($x); //6                                                           - 小数点以下切り上げ
//echo floor($x); //5                                                         - 小数点以下切り捨て
//echo round($x); //6                                                       - 四捨五入
//echo rand(1,10);                                                           - 1-10の値をランダムに表示

$s1 = "hello";
$s2 = "ねこ";
//echo strlen($s1); //5                                                     - 桁数
//echo mb_strlen($s2); //2                                              - マルチバイト型の文字数
//printf("%s - %s - %.3f", $s1 , $s2 , $x);                        - データ型を指定して表示する

$colors = ["red" , "blue" , "pink"];
echo count($colors);                                                      - 配列の数を取得する
echo implode("@",$colors);                                           - 指定した文字で配列の情報を区切って表示する

★クラス・インスタンス
・User
・アクセス権
 ・private :そのクラス内からのみアクセス可能
 ・protected :そのクラス+親子クラスからアクセス可能
 ・public :すべてのクラスからアクセス可能

class User {                                                                   - Userクラスの設定
//property
//public $name;
//protected $name;
private $name;

//constructor
public function __construct($name) {
$this->name = $name;
}

//method
/final/ public function sayHi() {                                      - fainalを使用すると最終クラスになる
echo "hi! i am $this->name!";
}
}
class AdminUser extends User {                                 - Userをエクステンドした子クラス(親クラスの関数を使用できる)
public function sayHello() {
echo "hello from Admin!";
}
//override                                                                     - オーバーライドで、親クラスの関数を上書きできる
public function sayHi() {
echo " [admin]hi! i am $this->name!";
}

}

$tom = new User("Tom");                                            - newでUserクラスのインスタンスを登録
$bob = new User("Bob");

echo $tom->name;                                                      - Userクラスのmethodが使用可能
$bob->sayHi();

抽象クラス
abstract class BaseUser {                                            - abstract class クラス名で抽象クラスを作成する
public $name;
abstract public function sayHi();
}

class User extends BaseUser {
public function sayHi() {                                              - 子クラスは必ず抽象クラスのMethodを使わなければならない
echo "hello from User!";
}
}

interface                                                                  - 子クラスにて使用されるインターフェースを定義する
・例
interface sayHi{
public function sayHi();                                              - interfaceのアクセス権はpublicにする
}

interface sayHello{
public function sayHello();
}

class User impriments sayHi,sayhello {                    - extendsではなくimplementsを使用する(親クラスを複数設定できる)
public function sayHi(){
echo "hi!";
}
public function sayHello() {
echo "Hello!";
}
}


外部ファイルからのデータ利用
[外部ファイル]
<?php

class User {                                                              - ユーザー定義のファイル
public $name;
public function __construct($name) {
$this->name = $name;
}
public function sayHi() {
echo "hi , i am $this->name!";
}
}
[メインファイル]
<?php

//require: fatal error                                                 - fatal errorを吐き出し処理を終了する
//require_once

//require "User.class.php";

//include: worning                                                   - worningを吐き出し処理を続行する
//include_once

//autoload                                                                - クラス名が決まっていない場合使用する

spl_autoload_register(function($class) {
require $class . ".class.php";                                  - 指定したuserクラス+.class.phpでファイルを指定する
});

$bob = new User("Bob");

$bob->sayHi();

 

名前空間
[外部ファイル]
<?php

namespace Dotinstall\Lib;                                      - 名前空間の指定(階層構造で記載する)

class User {                                                            - ユーザー定義のファイル
public $name;
public function __construct($name) {
$this->name = $name;
}
public function sayHi() {
echo "hi , i am $this->name!";
}
}
[メインファイル]
<?php

//名前空間

require "User.class.php";
//use Dotinstall\Lib as Lib;                                      - use 名前空間 as 定義する文字列
use Dotinstall\Lib;                                                  - 定義する文字列を書かない場合は最終階層の文字列になる

$bob = new Lib\User("Bob");                                 - クラス名の前に名前空間の階層構造を記載する

$bob->sayHi();

 

例外処理

//function div($a,$b) {
// echo $a / $b ;
//}

function div($a,$b){
try{
if($b === 0) { - $b = 0の場合
throw new Exception("cannnot divide by 0!");        - 文字列を投げる
}
echo $a / $b;
} catch (Exception $e) { - Exeptionが投げられたら
echo $e->getMessage();                                        - getMessageで取得した文字列を表示する
}
}

div(7,2);
div(5,0);

フォームからのデータ処理
<?php

$username = ''; - の初期設定
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];                     - ユーザ名を取得する
$err = false;
if (strlen($username) > 8) {                                  - ユーザ名が8文字以上の場合
$err = true;
}
}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Check username</title>
</head>
<body>
<form action="" method="POST">
<input type="text" name="username" placeholder="user name" value="<?php echo
htmlspecialchars($username, ENT_QUOTES, 'UTF-8'); ?> ">   - ユーザ名の取得
<input type="submit" value="Check!">
<?php if ($err) {echo "Too long!"; } ?>                                          - ユーザ名が8文字以上の場合表示する
</form>
</body>
</html>

クッキー                                                                                - データをブラウザ内に保存する
 ・ブラウザに保存するので、ほかのプログラムからも取得可能
setcookie("username" , "suzuki");                                         - usernameにsuzukiという値をセットする
setcookie("username" , "suzuki" , time()+60*60);                 - 有効期限はtimeで設定する
setcookie("username" , "suzuki" , time()-60*60);                  - 有効期限を過去時間にするとcookieの削除

echo $_COOKIE['username'];

セッション                                                                            - データをサーバー内に保存する
・以下のような利点がある
 ・大きなデータ
 ・改ざんされない
 ・中身が見られない

session_start();                                                                     - session開始時の定義

//$_SESSION['username'] = "suzuki";
//echo $_SESSION['username'];

unset($_SESSION[username]);                                           - session終了の定義
echo $_SESSION('username');