PHP関連のことを調べてみた2020年04月02日

PHP関連のことを調べてみた2020年04月02日

PHP if, isset, emptyの真偽の判定について if()

条件分岐の基本的なところでつまづいたので、if,isset,emptyの挙動について簡単にまとめてみます。

######配列$arrayをif, isset, empty それぞれで出力してみました。

“`php
$array = [0, ‘0’, 10, false, true, null, ”, [] ];

foreach($array as $val){
if($val){echo “truthy”;}
if(!$val){echo “falsy”;}
echo “\n”;
}

foreach($array as $val){
if(isset($val)){echo “truthy”;}
if(!isset($val)){echo “falsy”;}
echo “\n”;
}

foreach($array as $val){
if(empty($val)){echo “truthy”;}
if(!empty($val)){echo “falsy”;}
echo “\n”;
}

“`

######結果

“`php

元記事を表示

特定の数字やアルファベットを有する配列の生成 range()関数

指定した範囲の要素を持つ配列の生成にはrange()関数を使用します。

“`php:dice.php
$dice = range(1, 6);

var_dump($dice);
“`

↓実行結果

“`php:dice.php
array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) }
“`

このように引数に指定した範囲の値を持つ配列の生成が出来ます。
数字以外にも、

“`php:abc.php
$alphabet = range(‘a’, ‘z’);

var_dump($alphabet);
“`

↓実行結果

“`php:abc.php
array(26) { [0]=> string(1) “a” [1]=> string(1) “b” [2]=> string(1) “c” [3]=> string(1) “d” [4]=> string(1) “e” [5]=> string(1) “f” [6]=> string(1) “g”

元記事を表示

多次元配列について

配列の中のキーを配列として格納することが可能。

“`php:meet.php
$meet = array(
‘鶏肉’=> array(
‘price’ => 68,
‘stock’ => 10),

‘豚肉’ => array(
‘price’ => 89,
‘stock’ => 15),

‘牛肉’ => array(
‘price’ => 128,
‘stock’ => 8)
);
foreach($meet as $name => $value) {
echo $name . ‘は、100グラム’ . $value[‘price’] . ‘円、在庫は’ . $value[‘stock’] . ‘個です。’ . ‘
‘;
}

“`
↓実行結果

“` php:meet.php
鶏肉は、100グラム68円、在庫は10個です。
豚肉は、100グラム89円、在庫は15個です。
牛肉は、100グラム

元記事を表示

if文の省略記法

“`php:from.php
$area = ‘京都’;

//A
$from = isset($area) ? ‘出身は’ . $area . ‘です’ : ‘出身地が設定されてません’;

//B
if (isset($area)) {
$from = ‘出身は’ . $area . ‘です’;
} else {
$from = ‘,出身地が設定されてません’;
}
“`

Aの書き方とBの書き方ではどちらも同じ結果が$fromに代入されることになります。
初学者の自分はBの表記法でしかしたことなかったですが、Aの表記法の方が断然すっきりしますね。

元記事を表示

複数行にまたがる文字列を利用する方法(ヒアドキュメント)

シングルクオートとダブルクオート以外で、複数行にまたがる文字列を利用する方法でヒアドキュメントがあります。
ヒアドキュメント構文(<<<)の後に終端識別子を定義し、それが出現するまでを文字列として認識します。 ```php:heredocument.php $age = 29; $a = <<

元記事を表示

dump()やdd()をグローバルに使えるようにする

[Twitterで見かけたこの記事](https://www.sigerr.org/article/make-php-lib-functions-like-dump-or-dd-globally-available)を読んで知ったのですが、その紹介です。

LaravelやSymfonyを使っている方は`dump`や`dd`を使う機会が結構あると思います。便利ですよね。`var_dump`?`print_r`?なにそれおいしry

しかしLaravelやSymfonyの外でやろうとするとちょっと面倒です。これだけのためにわざわざ`symfony/var-dumper`をrequireすることもしばしば。しかしもう必要ありません。めっちゃシンプルに**常に**(psyshコンソールの中でも!)この機能をプリロードする方法を見つけました。 (元記事の方が)

PHPにビルトインされている[auto_prepend_fileオプション](https://www.php.net/manual/ja/ini.core.php#ini.auto-prepend-file)を使います。

なお、元記

元記事を表示

Laravel 5.5 でのパスワードリセット方法

Laravel 5.5パスワードリセットの機能を実装するのに結構苦労したので、
メモとして残させてもらいます。
間違ってるところもあると思いますので、何かあればご指摘いただければ嬉しいです。

#やりたい事
laravelでパスワードリセット機能を実装する。
パスワード忘れてログインできない!って時に使うやつ。

#migrate
“`
php artisan migrate
“`
#認証機能
“`
php artisan make:auth
“`
以上で大半の準備が完了です。
必要なコントローラーは“`app/http/controllers/auth/“`
ビューは“`resources/views/auth/passwords/“`
ルーティングにも

“`web.php
Auth::routes()
Route::get(‘/home’, ‘HomeController@index’)->name(‘home’);
“`
みたいなのが追加されます。

#mailableクラス作成

“`
php artisan make:mail ResetPasswor

元記事を表示

?【PHP】逆順forループで文字列を読んでいく

## 環境
PHP 7.2.21

## やりたいこと
単純な文字列を後ろから一文字ずつ読んで色々判定したいので
後ろから一文字ずつのforループを実装してみる

## やったこと
forの開始位置をstrlen()で文字数取得し$i–で逆に回す
※マルチバイト文字に対応していないのでそこは別途なんとかしたい

“`forLoop.php
// 対象の文字列
$tmpString = ‘eltociear_hoge’;

for ($i = strlen($tmpString) -1; $i > -1; $i–) {
// 一文字を表示
var_dump($tmpString[$i]);
}
“`

### 出力結果
“`
string(1) “e”
string(1) “g”
string(1) “o”
string(1) “h”
string(1) “_”
string(1) “r”
string(1) “a”
string(1) “e”
string(1) “

元記事を表示

【WAMP】WindowsとApacheとMysqlとPhpと

# 概要
仕事のために試したことをまとめたものです。
Apacheがwin64、PHPがwin32だとうまくいかなかったのでMySQLも統一の必要があるかもしれません。

# バージョン
– Apache:httpd-2.4.41-win32-VS16.zip
– MySQL:mysql-8.0.19-winx64.zip
– PHP:php-5.4.45-Win32-VC9-x86.zip

# インストール
各アプリケーションのインストールから実行までの手順を記載

## Apache
1. ファイルをダウンロードし展開(C:\Apache24)
2. httpd.confに以下を追記
3. http\://localhost/でアクセス可能に:`ServerName localhost:80`
4. PHPのディレクトリを指定:`PHPIniDir “c:/php”`
6. .phpファイルをPHPとして実行可能に:`AddType application/x-httpd-php .php`
5. apache2.4用PHP5モジュールをロード:`

元記事を表示

Laravel ユーザIDを取得しようとしたらエラーが出た話

# 目的

– 初歩的であるがこれからもうっかり発生させそうなエラーなので解決方法を含めてまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| OS | macOS Catalina(10.15.3) ||
| ハードウェア | MacBook Air (11-inch ,2012) ||
| プロセッサ | 1.7 GHz デュアルコアIntel Core i5 ||
| メモリ | 8 GB 1600 MHz DDR3 ||
| グラフィックス | Intel HD Graphics 4000 1536 MB ||

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いて導入 |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いて導入 |

元記事を表示

本日の学習内容part5

##書籍での学習を始めます
PHPを[Progate](https://prog-8.com/)や[ドットインストール](https://dotinstall.com/)、[Udemy](https://www.udemy.com/)である程度学習しましたので、一度フレームワークというものを触ってみようという事で、先週末に[PHPフレームワークLarabel入門第2版](https://www.shuwasystem.co.jp/book/9784798060996.html)を買ってきました。

##今日した事
・composerのインストール
 やり方は端折ります。が、ネット上にも情報が転がってましたので、リンク貼っておきます。[【PHP】Composerは絶対必要!インストール方法と解説で完全攻略](https://www.sejuku.net/blog/82454)

・Laravelのインストール
 こちらもやり方を端折ります。(著作権侵害こわひ。) こちらもネット上のやり方リンク貼っておきます。[導入手順を解説!Laravelのインストール方法【初心者向け】](https:

元記事を表示

PHP学習記 #3日目

#useとは
名前空間の拡張機能であって、クラス、関数、定数などをインポートするときに使用する。

#stmt
PDOStatementオブジェクトを示すことが多い。

#queryとprepareの違い
PDO(PHP Data Object)でのクエリの実行には2種類の存在する。それが、query()とprepare()である。
queryメソッドを利用してSQL文を実行する際は、ユーザーからの入力をSQL文に含めることが出来ない。しかし、prepareメソッドを利用して、SQL文を実行する際は、ユーザーからの入力をSQL文に含めることができる。

#try-catchとは
tryブロックにはメイン処理に必要な処理を記述する。catchブロックにはメイン処理に例外が発生した場合、その情報をキャッチし、異常処理を記述する。

元記事を表示

jsson_encodeとserializeでハマった話

# はじめに

サイト共通の重い計算処理を各ページでやるコストが高いので、処理結果をobj化してDBに保存して使いまわしたい
・・・と考えた。

# 最初にやってみた方法
## 保存用テーブル
“`sql
CREATE TABLE IF NOT EXISTS `xxxx_save_t` (
`xxxx_save_id` int(11) NOT NULL AUTO_INCREMENT,
`data` longblob NOT NULL,
`create_time` datetime NOT NULL,
`update_time` datetime NOT NULL,
`delete_time` datetime DEFAULT NULL,
`delete_flg` int(11) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`xxxx_save_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
“`

## 保存処理
“`php
$obj = xxxx /

元記事を表示

Migrate:refreshもだめ、phpMyAdminもだめ。

今日、Laravelのサーバーで`git pull`した後に、`migrate:refresh`をしようとしたらエラーが発生してしまいました。

原因は、migrationの名前を変更したことなのですが、さらに問題が発生しました。

**phpMyAdminに入れねぇ。。**

phpMyAdminがサーバー側のエラーで入れませんでした。

そこで考えました。

**PHPでテーブル消すコード書けば良くね?**

ということで、サーバーへのアクセス制限をしたのちに下のコードでテーブルを全て消しました。

“`PHP

query(‘SHOW TABLES’);
while($re = $stmt->fetch(PDO::FETCH_ASSOC)){
echo $re[‘Tables_in_DB名’].’,’;
$dbh->query(‘DROP TABLE ‘.$re[‘Tables_

元記事を表示

PhpStormでPSR-12に準拠させる

Preferences -> Editor -> Code Style -> PHP
までいき、Set from…をクリックすると、その中にPSR-12がある。
PhpStormでPSR-12に準拠させる.png
そこから選べばOK。

あとはReformat Code(Option + Command + L)でコードを修正。

元記事を表示

phpのCarbonで月の計算をするときの注意点

phpの日付操作の定番ライブラリである[Carbon](https://carbon.nesbot.com)についてです。

# 問題点
「10月31日」に1ヶ月足すと何日が正解でしょうか?
感覚的には「11月30日」になってほしいのではないでしょうか?
Carbonでは`addMonth()`や`addMonths()`で1ヶ月足すと

“`php
Carbon::parse(‘2018-10-31’)->addMonth()->toDateString(); // 2018-12-01
“`

`2018-12-01`になってしまいます。

こうなることを知ってないとプログラム中で意図しないことになる場合があります。
やっかいなのは月末くらいしかこのパターンにならないためテスト中に問題に気付きにくいことです。

この問題を解決する方法はいくつかあります。

# addMonthNoOverflow()
`addMonth()`のかわりに`addMonthNoOverflow()`を使います。
これを使うと

“`php
Carbon::parse(‘2018-10-

元記事を表示

【初心者向け】PHPマスター講座 vol.4(比較演算子を学ぼう)

みなさんこんにちは!けいです

今回は「比較演算子」について解説します!

#【PHPマスター講座】演算子とは

===========================

###▶︎演算子(えんざんし)とは何か??

>ひとつ以上の値 (あるいはプログラミング用語における「式」) から別の値 (制御構造が式になるように) を生み出すもの(引用先:PHPマニュアル)

見てもらうとわかるように…

マニュアルは「これでもか!」ってくらい
簡単な内容を複雑に書く天才なので

今回は演算子の中でも
初心者が一番初めに学んでおくべき

【比較演算子】について
一つずつ丁寧に解説していきます!

※演算子の基本となる[「代数演算子」](https://qiita.com/life_is/items/01d884602a355f9df926)の知識が曖昧な方は上記リンクから別記事を先に読むと理解度を上げていくことができますよ。

————————-

###▶︎【比較演算子を一言で表すと】?

「値同士を比較し、その結果を返す」ですが…

これだとまだイメージがつき

元記事を表示

PHP for文つまずきポイント

# はじめに
* 初心者向けです。お手柔らかに。
* 昔書いたやつです。下書き溜まっちゃったので出します。

## for文

“`.php
$array = [‘りんご’,’ゴリラ’,’ラッパ’,’パンツ’];
for ($i=0; $i < count($array); $i++) { # code... } ``` プログラミング始めたばかりの頃によく見たこの書き方、個人的にはよくないと思っている。 なぜなら ```.php $i < count($array) ``` ここにcount()関数を用いることによって、実行条件の評価時に毎回count()が実行されてしまうからだ。 これがどういうデメリットを産むかというと、 * 実行条件が評価される度に、関数が実行されるため重くなる。 * for文の中(ループ中)で$arrayの要素の数が変更された場合、実行条件が変わってしまう 致命的なのはこれ * for文の中(ループ中)で配列の数が変更された場合、実行条件が変わってしまう だろう。例をあげると ```.php $array = ['りんご','ゴリラ'

元記事を表示

php掲示板のログアウト画面をクッキーを用いて実装したいです。

ログイン状態からログアウトするためにクッキーを用いて実装しているのですが
右も左も分からなくなってしまいました。

ログイン画面までは実装できています。

ログアウト画面に関しても、自分なりにググって、調べてコードを打ち込みましたが全然ダメです;(

どなたか詳しい方、御指導、御鞭撻頂けないでしょうか。

“`
session_start();

if( !empty($_GET[‘btn_logout’]) ) {
unset($_SESSION[‘admin_login’]);
}
if( !empty($_POST[‘btn_submit’]) ) {
if( !empty($_POST[‘admin_password’]) && $_POST[‘admin_password’] === PASSWORD ) {
$_SESSION[‘admin_login’] = true;
} else {
$error_message[] = ‘ログインに失敗しました。’;
}
}

setcookie(“name”, “test”);
echo $_COOKIE[“n

元記事を表示

Chromeでajax処理のデバッグをする

## 概要
eccube4では商品をカートに入れる際にajax処理を使っているが、エラーになった時に詳細がわからなくて困っていた。

## 手順
POSTMANを使ったやりかたもあるが、今回はChromeを使った場合の手順。

**デベロッパーツールのネットワークタブを選択**
![Screen Shot 2020-03-31 at 11.50.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126370/eff6540c-47ea-93ad-b9d5-4910e621a590.png)

この状態でajaxの処理を実行する。
※今回はeccube4の商品詳細のソースなのでjavascriptのリダイレクト処理はコメントアウトなりして無効化しておく必要がある。

“`javascript
//window.location.href = “{{ url(‘cart’) }}”;
“`

Nameのところに新しくファイル?が追加されるのでファイルをクリックしてからHeaderのタブを選択する

!

元記事を表示

OTHERカテゴリの最新記事