PHP의 다양한 기능을 사용한 FizBuzz

11551 단어 PHP
이 기사는 PHP 콘펜스 홋카이도 2019 친목회 LT를 위한 슬라이드다.

오늘 비회의에서 이야기했다



PHP에는 별게 다 있어요.



PHP 언어 기능



PHP의 제어 구조



안연회의에서 PHP의 기능을 충분히 이용하려는 사람들과 PHP의 진보를 특별히 바라지 않는 사람들 사이에 갭이 존재한다. 이것이 바로 P++사건의 원흉이다.


그럼에도 불구하고 다양한 기능을 사용할 수 있다면 코드의 표현력은 확대될 것이다


PHP의 다양한 기능을 사용한 FizBuzz



주의


이 발표는 작업 중에 허용될 수 있는 PHP 코드 한 줄이 없습니다

그렇긴 하지만 트렁크 구석에서 PHP 코드를 사용해도 도움이 될 것 같아요.


for / foreach


피즈버즈의 클래식.


모처럼 왔으니 한데 섞어라

<?php
foreach (call_user_func(function() {
  $a = [];
  for ($i = 0; $i <= 100; $i++)
    $a[]=$i%3?($i%5?$i:@Fizz):($i%5?@Buzz:@FizzBuzz);
  return$a;
}) as $i) {
  echo $i, PHP_EOL;;
}

class

<?php
trait Fizz { function __toString() { return "Fizz"; } }
trait Buzz { function __toString() { return "Buzz"; } }
trait FizzBuzz { function __toString() { return "FizzBuzz"; } }
trait N { function __toString() { return ltrim(__CLASS__, @_); } }
spl_autoload_register(function ($class) {
    $n = ltrim($class, @_);
    $trait = null;
    if ($n % 3 === 0) $trait .= "Fizz";
    if ($n % 5 === 0) $trait .= "Buzz";
    $trait = $trait ?? 'N';
    eval("final class $class { use $trait; }");
});
foreach (range(1, 100) as $n) {
    $class = "_$n";
    echo new $class, PHP_EOL;
}

require


fizzbuzz.php
<?php global $i ?>
<?= ['FizzBuzz',null,null,'Fizz',null,'Buzz','Fizz',null,
null,'Fizz','Buzz',null,'Buzz',null,null][++$i%15] 
?? $i, PHP_EOL ?>
<?php require 'fizzbuzz.php' ?>
<?php require 'fizzbuzz.php' ?>
... (100回書く)

include

<?php set_error_handler(function ($_, $msg) {
    if (preg_match('/include\((?<n>\d+)\.php\)/', $msg, $m)) {
        if ($m['n'] % 3 === 0): ?>Fizz<?php endif;
        if ($m['n'] % 5 === 0): ?>Buzz<?php endif;
        if ($m['n'] % 3 !== 0 && $m['n'] % 5 !== 0) echo $m['n'];
        ?>

<?php
    };
});

foreach (range(1, 100) as $i) include "$i.php";

좋은 웹페이지 즐겨찾기