現在の言語: 日本語 |
PHPのClosure(クロージャー) |
プロパティ関連 |
class test1
{
//従来の書き方(Nullable型)
public ?Closure $task1 = null;
//PHP 8.0+ ユニオン型による書き換え
public Closure|null $task2 = null;
public function __construct(Closure $task)
{
$this->task1 = $task;
}
function test1(string $result):string
{
$test = function (string $tmp)
{
return $tmp." is test data.";
};
return $test($result);
}
function test2():string
{
$result = $this->closureTest(function(){
return "closureTest";
});
return $result;
}
private function closureTest(Closure $test):string
{
return $test();
}
function test3(Closure $task):void
{
$this->task2 =$task;
}
}
echo "<pre>";
$cls1= new test1(fn() => "task1 test");
echo $cls1->test1("test1 method").PHP_EOL;//test1 method is test data.
echo $cls1->test2().PHP_EOL;//closureTest
if($cls1->task1)
{
echo ($cls1->task1)().PHP_EOL;//task1 test
}
$cls1->test3(function(){ return "task3 test";});
if($cls1->task2)
{
echo ($cls1->task2)().PHP_EOL;//task3 test
}
echo "</pre>";
class test1
{
// Traditional syntax (Nullable type)
public ?Closure $task1 = null;
// Rewritten using PHP 8.0+ union types
public Closure|null $task2 = null;
public function __construct(Closure $task)
{
$this->task1 = $task;
}
function test1(string $result):string
{
$test = function (string $tmp)
{
return $tmp." is test data.";
};
return $test($result);
}
function test2():string
{
$result = $this->closureTest(function(){
return "closureTest";
});
return $result;
}
private function closureTest(Closure $test):string
{
return $test();
}
function test3(Closure $task):void
{
$this->task2 = $task;
}
}
echo "<pre>";
$cls1= new test1(fn() => "task1 test");
echo $cls1->test1("test1 method").PHP_EOL;//test1 method is test data.
echo $cls1->test2().PHP_EOL;//closureTest
if($cls1->task1)
{
echo ($cls1->task1)().PHP_EOL;//task1 test
}
$cls1->test3(function(){ return "task3 test";});
if($cls1->task2)
{
echo ($cls1->task2)().PHP_EOL;//task3 test
}
echo "</pre>";
| 著作権情報 |
| ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。 ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、 その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |