問題タブ [php-8.1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - preg_match は大きなテキストで strpos よりも高速ですか?
現在、PHP 5.2.17 用に書かれた非常に古いスクリプトを PHP 8.1.2 用に更新しています。多くのテキスト処理コード ブロックがあり、そのほとんどが preg_match/preg_match_all です。文字列マッチングの strpos は常に preg_match よりも高速であることは以前から知っていましたが、もう一度確認することにしました。
コードは次のとおりです。
と
php8.1.2 ディストリビューションに付属する readme-redist-bins.txt ファイル、約 30KB を取得しました。
結果 (preg_match_all):
結果 (strpos):
ダブルチェック... 2台のマシンでWindowsとLinuxのPHPビルドを試しました。
小さなファイル(200B)で同じコードを試しました
結果 (preg_match_all):
結果 (strpos):
そして今、タイミングはOKです。
では、preg_match が大きなテキストでより速く一致するというのは、どうしてでしょうか? 何か案は?
PS: PHP_7.2.10 を試してみました - 同じ結果です。
php - PHP 8.1 fastcgi exe は非スレッド セーフ バージョンでは使用できません
IIS FastCgi で使用するために、php を 7.2 から 8.1 にアップグレードしています。IIS FastCGI の PHP で推奨されているように、以下の URL から非スレッド セーフ バージョンをダウンロードすると、ダウンロードしたフォルダーに php-cgi.exe がありません。
https://windows.php.net/downloads/releases/php-8.1.2-nts-Win32-vs16-x64.zip
スレッドセーフバージョンをダウンロードすると、そこにあります。
PHP のダウンロード ページには、IIS と書かれています。IIS で PHP を FastCGI として使用している場合は、非スレッド セーフ (NTS) バージョンの PHP を使用する必要があります。
https://windows.php.net/download#php-8.1
誰かがこれを行う正しい方法を教えてもらえますか?
IIS で FastCgi をセットアップする方法を添付しました。
php - 動的な名前から PHP 列挙型を取得する
動的な名前からphp 8.1列挙型を作成しようとしています。できないようです。したがって、列挙型が与えられた
もちろん、次のように動作します:Foo::bar
これは動作しません:
宣言されていない静的プロパティ App\Console\Commands\Foo::$bar へのアクセス
ここでさまざまなトリックを試しましたが、役に立ちませんでした。動的な名前から列挙型インスタンスを取得することはできないようです。私のカスタムで簡単な回避策は、静的ファクトリである次のようになります。
これをトレイトに入れて、すべての列挙型でこれを継承できます。はい、問題は解決しました。
私の質問は次のとおりです。ここで何か不足していますか? ネイティブphpメソッドで列挙型をインスタンス化することは本当に不可能ですか? それとも、間違った方向に考えていますか?
php8.1 より前の class-as-enum composer パッケージには、これらの便利なメソッドがありました。 https://github.com/bensampo/laravel-enum を参照し てください
php - PHP と imagecreatefromstring の代替
誰かがphp関数の代替を与えることができますか
PHP 8.1 で最新の xampp をインストールしましたが、php.ini には GD2 ライブラリがありません。