Upgrade to Pro — share decks privately, control downloads, hide ads and more …

レガシーなPHPで無理矢理setAccessibleする方法(PHPer Kaigi 2022...

Avatar for maxima maxima
March 11, 2024

レガシーなPHPで無理矢理setAccessibleする方法(PHPer Kaigi 2022 LT)

Avatar for maxima

maxima

March 11, 2024

Other Decks in Technology

Transcript

  1. getterのように、privateメソッドを呼び出すwrapperを作ってあげれば良い。 <?php class SampleTest extends PHPUnit_Extensions_Database_TestCase { public function test_add

    メソッドが$a と$b の和を返すこと(){ runkit_method_add( 'Sample', 'wrapper_add', '$a, $b', 'return $this->add($a,$b);', RUNKIT_ACC_PUBLIC ); $sample = new Sample(); $result = $sample->wrapper_add(100, 200); $this->assertSame(300, $result); runkit_method_remove( 'Sample', 'wrapper_add' ); } } class Sample { private function add($a, $b){ return $a + $b; } }
  2. <?php class SampleTest extends PHPUnit_Extensions_Database_TestCase { public function test_add メソッドが$a

    と$b の和を返すこと(){ runkit_method_add( 'Sample', 'wrapper_add', '$a, $b', 'return $this->add($a,$b);', RUNKIT_ACC_PUBLIC ); $sample = new Sample(); $result = $sample->wrapper_add(100, 200); $this->assertSame(300, $result); runkit_method_remove( 'Sample', 'wrapper_add' ); } } class Sample { private function add($a, $b){ return $a + $b; } }
  3. before <?php class Sample { private function add($a, $b){ return

    $a + $b; } } after <?php class Sample { private function add($a, $b){ return $a + $b; } public function wrapper_add($a, $b){ return $this->add($a, $b); } }
  4. <?php class SampleTest extends PHPUnit_Extensions_Database_TestCase { public function test_add メソッドが$a

    と$b の和を返すこと(){ runkit_method_add( 'Sample', 'wrapper_add', '$a, $b', 'return $this->add($a,$b);', RUNKIT_ACC_PUBLIC ); $sample = new Sample(); $result = $sample->wrapper_add(100, 200); $this->assertSame(300, $result); runkit_method_remove( 'Sample', 'wrapper_add' ); } } class Sample { private function add($a, $b){ return $a + $b; } }
  5. <?php class SampleTest extends PHPUnit_Extensions_Database_TestCase { public function test_add メソッドが$a

    と$b の和を返すこと(){ runkit_method_add( 'Sample', 'wrapper_add', '$a, $b', 'return $this->add($a,$b);', RUNKIT_ACC_PUBLIC ); $sample = new Sample(); $result = $sample->wrapper_add(100, 200); $this->assertSame(300, $result); runkit_method_remove( 'Sample', 'wrapper_add' ); } } class Sample { private function add($a, $b){ return $a + $b; } }