ゼロパディング
$num = 7;
$num2 = sprintf('%03d', $num);
echo $num2;
$ php index.php
007
前ゼロ除去
L intにキャスト
$str = "00070"; $str = (int)$str; echo $str;
ltrim
$str = "00070"; $str = ltrim($str, 0); echo $str;
随机应变 ABCD: Always Be Coding and … : хороший
ゼロパディング
$num = 7;
$num2 = sprintf('%03d', $num);
echo $num2;
$ php index.php
007
前ゼロ除去
L intにキャスト
$str = "00070"; $str = (int)$str; echo $str;
ltrim
$str = "00070"; $str = ltrim($str, 0); echo $str;
$intermediate = "-"; $var1 = "いつかは"; $var2 = "ゆかし"; $joined = $var1 . $intermediate . $var2; echo $joined;
$ php index.php
いつかは-ゆかし
$var = true;
if($var){
echo "成功";
} else {
echo "失敗";
}
$ php index.php
成功
$var = false;
if($var){
echo "成功";
} else {
echo "失敗";
}
$ php index.php
失敗
ifでtrue, falseを判定できる
pdbを使用できる
import pdb def factorial(n, sum=0): if n == 0: return sum pdb.set_trace() sum += n print(sum) return factorial(n-1, sum) if __name__ == "__main__": factorial(5)
$ python3 test.py > /home/vagrant/dev/test/test.py(8)factorial() -> sum += n (Pdb) bt /home/vagrant/dev/test/test.py(13)<module>() -> factorial(5) > /home/vagrant/dev/test/test.py(8)factorial() -> sum += n (Pdb) list 3 def factorial(n, sum=0): 4 if n == 0: 5 return sum 6 7 pdb.set_trace() 8 -> sum += n 9 print(sum) 10 return factorial(n-1, sum) 11 12 if __name__ == "__main__": 13 factorial(5) (Pdb)
# coding:utf-8
import unittest
import fizzbuzz as fb
class FizzBuzzTest(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_normal(self):
self.assertEqual(1, fb.fizzbuzz(1))
def test_fizz(self):
self.assertEqual("Fizz", fb.fizzbuzz(3))
def test_buzz(self):
self.assertEqual("Buzz", fb.fizzbuzz(5))
def test_fizzbuzz(self):
self.assertEqual("FizzBuzz", fb.fizzbuzz(3))
if __name__ == "__main__":
unittest.main()
メインコード
# coding:utf-8 def fizzbuzz(number): if number % 15 == 0: return "FizzBuzz" if number % 5 == 0: return "Buzz" if number % 3 == 0: return "Fizz" return number if __name__ == "__main__": for i in range(1, 101): print(fizzbuzz(i))
t$ python3 test_fizzbuzz.py
..F.
======================================================================
FAIL: test_fizzbuzz (__main__.FizzBuzzTest)
———————————————————————-
Traceback (most recent call last):
File “test_fizzbuzz.py”, line 23, in test_fizzbuzz
self.assertEqual(“FizzBuzz”, fb.fizzbuzz(3))
AssertionError: ‘FizzBuzz’ != ‘Fizz’
– FizzBuzz
+ Fizz
———————————————————————-
Ran 4 tests in 0.002s
FAILED (failures=1)
beforeFilterはControllerで使用するコールバックメソッドで、主に共通化したい処理を記述
メソッドの中身よりも先に実行される
function beforeFilter(Event $event){
処理...
}
sample
cake/src/Controller/BeforeController.php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Event\Event;
class BeforeController extends AppController {
public $text = "samurai";
public function beforeFilter(Event $event){
$this->text = 'hogehoge';
}
public function index(){
this->set('text', $this->text);
}
}
beforeFilterははじめに呼び出されるため、Authなどのユーザ認証やエラー内容の設定に適している。
public function beforeFilter(Event $event){
$this->Auth->config('authenticate', ['Form']);
$this->Auth->config('authenticate', [
'Basic' => ['userModel' => 'Members'],
'Form' => ['userModel' => 'Members'],
]);
}
なるほど、どのタイミングで処理を行うかってことね。
interfaceとは: そのクラスに実装しないといけないメソッドをまとめたパッケージのようなもの。複数ファイルを作成する際に決まったメソッドを実装してほしい時に使える
interface Template {
public function setVariable($name, $var);
public function getHtml($template);
}
class Hoge implements Template {
public function setVariable($name, $var){
}
public function getHtml($template){
}
}
テーブルとテストデータ作成
CREATE TABLE companies(
id bigint primary key,
name varchar(50) NOT NULL,
tel varchar(50)
);
CREATE TABLE employees(
id bigint primary key,
company_id bigint,
name varchar(50) NOT NULL,
age integer,
FOREIGN KEY (company_id) references companies(id)
);
INSERT INTO companies(id, name, tel) VALUES
(1, ‘株式会社ほげ’, ’00-0000-0000′),
(2, ‘株式会社ふが’, ’00-0000-1111′),
(3, ‘株式会社ぴよ’, ’00-0000-2222′);
INSERT INTO employees(id, company_id, name, age) VALUES
(1, 1, ‘テスト太郎’, 25),
(2, 1, ‘テスト次郎’, 20),
(3, 2, ‘テスト三郎’, 30),
(4, null, ‘テスト五郎’, 40);
### 内部結合(inner join)
結合条件に一致するレコードだけ表示
testdb=# SELECT
testdb-# e.id AS employee_id,
testdb-# e.name AS employee_name,
testdb-# c.id AS company_id,
testdb-# c.name AS company_name
testdb-# FROM employees e
testdb-# JOIN companies c ON c.id = e.company_id;
employee_id | employee_name | company_id | company_name
————-+—————+————+————–
1 | テスト太郎 | 1 | 株式会社ほげ
2 | テスト次郎 | 1 | 株式会社ほげ
3 | テスト三郎 | 2 | 株式会社ふが
### LEFT JOIN
左外部結合。左テーブルを全て表示し、結合条件に一致しない右テーブルはNULLとして結合
testdb=# SELECT
testdb-# e.id AS employee_id,
testdb-# e.name AS employee_name,
testdb-# c.id AS company_id,
testdb-# c.name AS company_name
testdb-# FROM employees e
testdb-# LEFT JOIN companies c ON c.id = e.company_id;
employee_id | employee_name | company_id | company_name
————-+—————+————+————–
1 | テスト太郎 | 1 | 株式会社ほげ
2 | テスト次郎 | 1 | 株式会社ほげ
3 | テスト三郎 | 2 | 株式会社ふが
4 | テスト五郎 | |
### LIGHT JOIN
testdb=# SELECT
testdb-# e.id AS employee_id,
testdb-# e.name AS employee_name,
testdb-# c.id AS company_id,
testdb-# c.name AS company_name
testdb-# FROM employees e
testdb-# RIGHT JOIN companies c ON c.id = e.company_id;
employee_id | employee_name | company_id | company_name
————-+—————+————+————–
1 | テスト太郎 | 1 | 株式会社ほげ
2 | テスト次郎 | 1 | 株式会社ほげ
3 | テスト三郎 | 2 | 株式会社ふが
| | 3 | 株式会社ぴよ
(4 rows)
なるほど、これは勉強になる。
ini_set('display_errors', 1);
$fd = fopen("c:/temp/abc.txt", "r");
echo "継続処理";
a();
echo "継続処理";
$ php index.php
Warning: fopen(c:/temp/abc.txt): failed to open stream: No such file or directory in /home/vagrant/dev/test/index.php on line 5
継続処理
Fatal error: Uncaught Error: Call to undefined function a() in /home/vagrant/dev/test/index.php:8
Stack trace:
#0 {main}
thrown in /home/vagrant/dev/test/index.php on line 8
### set_error_handler
set_error_handler(function($errno, $errstr, $errfile, $errline){
print("エラーが発生しました。$errno, $errstr <br>");
});
$fd = fopen("c:/temp/abc.txt", "r");
$ php index.php
エラーが発生しました。2, fopen(c:/temp/abc.txt): failed to open stream: No such file or directory
### Exception
例外が発生しそうな処理には、try, catch, finallyを使う
set_error_handler(function($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
return;
}
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
try {
$fd = fopen("c:/temp/abc.txt", "r");
} catch(Exception $e){
echo "例外が発生しました。".$e->getMessage();
}
OSS Linux distribution
RedHat Enterprise Linux8のクローンとして開発されており、CentOS/AlmaLinuxと変更点はない
yumリポジトリが提供、コミュニティ中心の発展
Azureでの配布がない、セキュアブート対応もない
ミラーリポジトリはAlmaLinuxの方が多い
現場ではRockey Linuxの方が採用が多いみたい