이 글은 ThinkPHP 5.1에서 Cache 소스 코드를 수정하는 방법(코드 예제)을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
최근 THinkPHP 5.1을 배우고 있는데 Cache 메소드의 동작을 보고 조금 헷갈렸습니다. 많은 메소드를 캡슐화하고 사용하기 매우 편리하지만, Redis의 고급 작업에 그다지 친숙하지는 않은 것 같습니다. 학습을 위해 소스 코드를 약간 수정했습니다. 먼저 두 가지 사항을 말씀드리겠습니다. 첫째, 이 수정 사항은 개인적인 의견일 뿐 모든 사람에게 적합하지는 않습니다. 둘째, 이 수정 사항은 학습용이므로 소스 코드를 수정할 때 주의하시기 바랍니다.
Question
Redis를 연습하면서 hSet, hGet 등의 고급 메서드를 사용하려면 실행하기 전에 먼저 핸들을 반환해야 한다는 것을 알았습니다. 아래에서 볼 수 있듯이
<?php namespace app\index\controller; use think\cache\driver\Redis; use think\Controller; class RedisTest extends Controller { public function index() { $redis = new Redis(); $redis = $redis->handler(); dump($redis->hSet('h_name', '1', 'tom'));// int(1) } }
실행에 성공했습니다. 문제는 핸들이 먼저 반환되어야 하는 이유인데, 이는 __call이라는 매직 메서드로 해결할 수 있습니다.
소스 코드 추적
의심스러운 부분이 있으니 이를 해결해야 합니다. 소스 코드를 추적해 보니 thinkphp/library/think/cache/Driver.php가 실제로 __call이 없고 고급 메서드를 실행하기 위해 핸들을 반환하는 핸들러만 있는 것을 발견했습니다. __clss가 사용되지 않는 이유를 이해할 수 없습니다.
문제 해결
해결책은 thinkphp/library/think/cache/Driver.php에 __call 메소드를 추가하여 Redis뿐만 아니라 이를 상속받은 다른 Cache 클래스도 고급 메소드를 직접 사용할 수 있도록 하는 것이다. 파일을 직접 사용할 수 있습니다. 코드는 다음과 같습니다
/** * 执行高级方法 * @param $method * @param $parameters * @return mixed */ public function __call($method, $parameters) { return call_user_func_array(array($this->handler(), $method), $parameters); }
테스트 코드를 다시 살펴보세요
<?php namespace app\index\controller; use think\cache\driver\Redis; use think\Controller; class RedisTest extends Controller { public function index() { $redis = new Redis(); // $redis = $redis->handler(); dump($redis->hSet('h_name', '2', 'jerry'));// int(1) } }
이 문제는 해결되었습니다. 수정을 마치고 나니 라라벨이 __call을 사용하는 것 같다는 생각이 나서 소스코드를 살펴보니 정말 그랬습니다. ravel/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php
/** * Pass methods onto the default Redis connection. * * @param string $method * @param array $parameters * @return mixed */ public function __call($method, $parameters) { return $this->connection()->{$method}(...$parameters); }
Conclusion
에 다음과 같은 코드가 있습니다. 사실 이 작은 수정의 상징적인 의미는 결국 실제 의미보다 큽니다. , 이것은 버그가 아닙니다. 핸들러를 사용하는 것도 가능합니다. 나에게 더 큰 의미는 어떤 문제에 직면했을 때 소스 코드를 확인하려는 경향이 더 크다는 것입니다. 많이 시청할수록 능력은 자연스럽게 향상될 것입니다.
위 내용은 ThinkPHP 5.1에서 Cache 소스 코드를 수정하는 방법 소개(코드 예시)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!