마법 메소드 __call()의 영리한 오버로딩
반년 동안 일했는데 대학 4년보다 이번 반년에 더 많은 것을 배운 것 같습니다. 주된 이유는 마음이 차분해지고 목표가 분명해졌기 때문입니다. 하루 종일 게임에 얽매이지 마세요. 대학에 다닐 때 실제로 게임을 하면 정상적인 공부와 일에 영향을 미친다는 것을 깨달았지만, 여전히 밤낮으로 자주 게임을 할 수밖에 없었습니다. 나는 여전히 집에서 게임을 하고 있었는데, 이것이 내가 대학 4년 동안 게임만 하고 왼손과 오른손만 하고 여자친구가 없었던 이유 중 하나이기도 하다. 이제 일을 하다 보니 매일 과제가 생기고, 옆에 재능 있는 분들이 물 만난 오리처럼 프로젝트에 임하는 모습을 보면 따라잡아야겠다는 생각이 들어서 제 자신에게 조금이라도 더 힘을 쏟고 있습니다. 새로운 지식을 배우기 위해 매일매일 일을 하고 있는데, 이제 익숙하지 않았던 Linux를 사용할 수 있게 되었습니다. 현재 업무에 능숙하다는 것(초보, 고급 초보자, 유능함, 능숙함, 전문가)으로 활동, 인터페이스 및 백엔드를 개발했으며 합리적인 수준에서 시스템 프레임워크를 최적화하고 개선했습니다. 제품 운영으로 인해 발생하는 요구 사항을 신속하게 지원할 수 있습니다. 물론 한 가지 느낀 점은 프로그래머는 정말 이상한 집단이다. 대부분 항상 자신의 아이디어가 최고라고 생각한다. 물론 이는 자신감이라고 생각하지만 토론 중 공격적인 태도가 반드시 좋은 것은 아니기 때문에 다른 사람의 의견을 경청해야 자신의 단점을 발견할 수 있을 뿐만 아니라, 또한 좋은 우정을 쌓으세요: " ". 지난 6개월 동안 제 심정을 너무 많이 말씀드렸는데, 끝까지 함께 읽어주셔서 감사합니다^_^.
이제 실제 질문에 들어가서 PHP의 마법의 방법을 능숙하게 사용하는 방법에 대해 이야기해 보겠습니다. 저는 이것이 대부분의 프로젝트에서 사용될 것이라고 믿습니다.
먼저 설명하겠습니다. 저는 이미 제 프로젝트에서 이 작은 트릭을 아주 잘 사용했고, 이것이 우리 프로젝트에 큰 편의를 가져다주었습니다. 여기에서 몇 가지 세부 사항을 설명하겠습니다. 계속해서 읽어 보시기 바랍니다.
프로젝트에는 게임의 로봇 오픈 기간, 결제 수단 활성화 여부, 쇼핑몰 내 타이틀 표시 구성 등 구성할 수 있는 많은 양의 구성 정보가 있어야 합니다. 이러한 구성 정보의 특징 중 하나는 특정 규칙이 없으며 실제 상황에 따라 제품 작동이 언제든지 변경될 수 있다는 것입니다. .. 생각해보면 아마도 하나뿐인 정보가 테이블에 저장되어 있기 때문에 이 정보에 대한 규칙은 없지만 다른 방법을 생각해야 한다는 특징이 있습니다. 과하지 않을 것이고 일반적으로 배열은 구성해야 하는 모든 정보를 저장할 수 있으므로 JSON 문자열 저장소 정보를 사용하는 것이 좋은 선택입니다. 필요할 때 json_decode를 꺼내서 바로 사용할 수 있습니다. 이를 달성하기 위해 PHP의 마법 메소드를 교묘하게 사용하는 방법을 살펴보겠습니다.
여기서 먼저 PHP의 마법 메소드인 __call()을 이해해야 합니다. 이 기능을 다음과 같이 설명하는 공식 PHP 문서를 확인하세요.
<span>public</span> <span>mixed</span> __call ( <span>string</span> <span>$name</span> , <span>array</span> <span>$arguments</span><span> ) __call() is triggered when invoking inaccessible methods in an </span><span>object</span> context.
객체에서 접근할 수 없는 메소드(권한 없음, 존재하지 않음)가 호출될 때 이 함수가 실행된다는 의미입니다. 함수의 $name 매개변수는 호출된 함수의 이름이고, $arguments는 매개변수입니다. 호출된 함수의 배열입니다. 다음 예를 살펴보세요.
<span>class</span><span> Test { </span><span>public</span> <span>function</span> __call(<span>$name</span>, <span>$arguments</span><span>) { </span><span>echo</span> "你调用了一个不存在的方法:\r"<span>; </span><span>echo</span> "函数名:{<span>$name</span>}\r"<span>; </span><span>echo</span> "参数: \r"<span>; </span><span>print_r</span>(<span>$arguments</span><span>); } } </span><span>$T</span> = <span>new</span><span> Test(); </span><span>$T</span>->setrobottime("12", "18");
이 함수는 다음과 같은 결과를 출력합니다
<span>你调用了一个不存在的方法: 函数名:setrobottime 参数: Array ( [</span>0] => 12<span> [</span>1] => 18<span> )</span>
이런 식으로 함수를 직접 정의할 수는 없지만 이 기능을 사용하여 뭔가를 할 수 있습니다. 코드의 구현 아이디어를 살펴보겠습니다. 주요 아이디어는 데이터베이스 연결과 같은 가정입니다.
<span>class</span><span> Config { </span><span>/*</span><span>* * 这里假定下数据库表名为 * config.config, * 字段为: * config_key varchar(50), * config_value text, * primary key(config_key) * * 数据库连接为$link * 插入方法封装为query * 获取一条信息方法封装为getOne </span><span>*/</span> <span>/*</span><span>* * 要进行的操作 </span><span>*/</span> <span>private</span> <span>static</span> <span>$keys</span> = <span>array</span><span>( </span><span>//</span><span>'调用方法' => 'key',</span> 'roboottime' => 'ROBOOTTIME', 'dailysignin' => 'DAILYSIGNIN',<span> ); </span><span>/*</span><span>* * 设置方法 * @param string $config_key 配置项key * @param string $config_value 配置型内容(一般为json格式) * @returne boolen true/false 插入是否成功 </span><span>*/</span> <span>private</span> <span>function</span> set(<span>$config_key</span>, <span>$config_value</span><span>){ </span><span>$sql</span> = "insert into config.config (config_key,config_value) values ('{<span>$config_key</span>}','{<span>$config_value</span>}') on duplicate key update config_value='{<span>$config_value</span>}'"<span>; </span><span>return</span> <span>$link</span>->query(<span>$sql</span><span>); } </span><span>/*</span><span>* * 获取值的方法 * @param $config_key 要获取的配置的key * @returne string/false json字符串/失败 </span><span>*/</span> <span>private</span> <span>function</span> get(<span>$config_key</span><span>) { </span><span>$sql</span> = "select * from config.config where config_key='{<span>$config_key</span>}'"<span>; </span><span>if</span>(<span>$ret</span> = <span>$link</span>->getOne(<span>$sql</span>,<span> MYSQL_ASSOC)){ </span><span>return</span> <span>$ret</span><span>; } </span><span>return</span> <span>false</span><span>; } </span><span>/*</span><span>* * 重载魔术方法 * @param string $name 被调用的方法名 * @param array $arguments 调用时传递的参数 * @return mixed 返回结果 </span><span>*/</span> <span>public</span> <span>function</span> __call(<span>$name</span>, <span>$arguments</span><span>) { </span><span>$act</span> = <span>substr</span>(<span>$name</span>, 0, 3<span>); </span><span>$func</span> = <span>substr</span>(<span>$name</span>, 3<span>); </span><span>if</span>(!<span>in_array</span>(<span>$func</span>, self::<span>$keys</span><span>)){ </span><span>return</span> <span>false</span><span>; } </span><span>if</span>(<span>$act</span> == 'set'<span>) { </span><span>return</span> <span>$this</span>->set(self::[<span>$func</span>], <span>$arguments</span>[0<span>]); } </span><span>elseif</span>(<span>$act</span> == 'get'<span>) { </span><span>return</span> <span>$this</span>->get(self::[<span>$func</span><span>]); } </span><span>return</span> <span>false</span><span>; } }</span>
이렇게 하면 하나의 테이블에 여러 정보를 저장할 수 있고 호출 시에도 매우 편리합니다. Config::$keys 배열에 정보를 확장하기만 하면 됩니다. 가능 이 테이블에 어떤 구성이 저장되어 있는지 명확하게 알 수 있습니다.
사용시 이렇게 보관 및 회수가 가능합니다
<span>$config</span> = <span>new</span><span> Config(); </span><span>$info</span> = <span>array</span>("12","20"<span>); </span><span>//</span><span>设置</span> <span>$config</span>->setroboottime(json_encode(<span>$info</span><span>)); </span><span>//</span><span>获取</span> <span>$config</span>->getroboottime();
다음은 주의할 점입니다. 이러한 구성 정보는 일반적으로 Redis가 중단된 후 데이터베이스에서 복구되는 것을 방지하기 위해 데이터베이스에 저장됩니다. db와의 상호작용을 줄이기 위해 캐시에 직접 배치됩니다.
이 글의 저작권은 저자(luluyrt@163.com)에게 있습니다. 글을 재인쇄한 후, 저자와 원문 링크를 반드시 밝혀야 합니다. 기사 페이지의 명확한 위치에 제공되지 않으면 당사는 법적 책임 권리를 추구할 권리를 보유합니다.
댓글 새로고침 페이지 새로고침 맨 위로 돌아가기
블로그파크 홈페이지 보웬뉴스 플래시 프로그래머 채용 지식베이스
公告
Copyright ©2015 奔跑的Man

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











새 버전의 애플리케이션을 설치하는 동안 Windows에 "C:\\Windows\Microsoft.Net\Framework\v2.0.50727\Config\machine.configParser가 오류 0xC00CE556을 반환했습니다."를 구문 분석하는 동안 오류가 발생했습니다.라는 오류 메시지가 표시될 수 있습니다. 이 문제는 시스템을 부팅할 때도 발생합니다. 어떤 상황에서 이 문제가 발생하더라도 .NETFramework가 배후의 실제 범인입니다. 이 오류 코드가 다시 나타나는 것을 방지하는 데 사용할 수 있는 몇 가지 매우 간단한 수정 방법이 있습니다. 수정 1 – 손상된 파일 교체 원래 디렉터리에서 손상된 ma를 쉽게 교체할 수 있습니다

SQL에서 ID란 무엇입니까? SQL에서 ID는 자동 증가 숫자를 생성하는 데 사용되는 특수 데이터 유형으로, 테이블의 각 데이터 행을 고유하게 식별하는 데 사용됩니다. ID 열은 일반적으로 기본 키 열과 함께 사용되어 각 레코드에 고유한 식별자가 있는지 확인합니다. 이 문서에서는 Identity를 사용하는 방법과 몇 가지 실제 코드 예제를 자세히 설명합니다. Identity를 사용하는 기본 방법은 테이블을 생성할 때 Identit을 사용하는 것입니다.

1. 기능 개요 키스페이스 알림을 통해 클라이언트는 채널이나 패턴을 구독하여 어떤 방식으로든 Rediskey 변경 사항을 수정하는 이벤트를 수신할 수 있습니다. 키 키를 수정하는 모든 명령입니다. LPUSHkeyvalue[value…] 명령을 수신한 모든 키입니다. db 데이터베이스의 모든 만료된 키입니다. 이벤트는 Redis의 구독 및 게시 기능(pub/sub)을 통해 배포되므로 구독 및 게시 기능을 지원하는 모든 클라이언트는 아무런 수정 없이 바로 키스페이스 알림 기능을 사용할 수 있습니다. Redis의 현재 구독 및 게시 기능은 Fireandforget 전략을 채택하고 있기 때문에 프로그램이

함수는 특정 기능을 포함하는 재사용 가능한 코드 블록으로, 입력 매개변수를 받아들이고 특정 작업을 수행하며 결과를 반환하는 것이 목적입니다. 코드 재사용성과 유지 관리성을 향상시키는 코드입니다.

발생한 문제: 개발 과정에서 login_logID(ID는 변수)와 같은 특정 규칙에 따라 일괄 삭제해야 하는 키가 발생합니다. 이제 "login_log*"와 같은 데이터를 삭제해야 하지만 그 자체는 redis입니다. 클래스 키 값에 대한 명령 키만 있고 특정 클래스에 대한 일괄 삭제 명령은 없습니다. 해결 방법: 먼저 쿼리한 다음 삭제하고, xargs를 사용하여 매개변수를 전달하고(xargs는 파이프 또는 표준 입력(stdin) 데이터를 명령줄 매개변수로 변환할 수 있음) 쿼리 문을 먼저 실행한 다음 쿼리된 키 값과 원래 del 매개변수를 제거합니다. 삭제. redis-cliKEYSkey* (검색 조건)|xargsr

패치할 수 없는 Yubico 2단계 인증 키 취약점으로 인해 대부분의 Yubikey 5, 보안 키 및 YubiHSM 2FA 장치의 보안이 손상되었습니다. Infineon SLB96xx 시리즈 TPM을 사용하는 Feitian A22 JavaCard 및 기타 장치도 취약합니다.

PHP 언어의 지속적인 발전에 따라 PHP 백엔드 프레임워크에서 널리 사용되는 ThinkPHP도 지속적으로 개선되고 있습니다. 비즈니스 시나리오가 점점 더 복잡해짐에 따라 ThinkPHP의 구성 관리에 대한 수요도 증가하고 있습니다. 이러한 맥락에서 ThinkPHP는 풍부한 구성 관리 기능을 제공합니다. 오늘은 ThinkPHPConfig를 통해 구성 관리를 구현하는 방법을 소개하겠습니다. 1. ThinkPHPConfig 소개 ThinkPHPConfig는 씬(Thin)입니다

1. CodeIgniter 소개 CodeIgniter는 웹 애플리케이션을 구축하기 위한 빠르고 강력한 도구를 웹 개발자에게 제공하도록 설계된 가볍고 포괄적인 PHP 개발 프레임워크입니다. MVC 아키텍처 패턴을 사용하여 빠른 개발과 기본 기능을 구현하는 동시에 다양한 데이터베이스를 지원하는 오픈 소스 프레임워크입니다. 2. Config 라이브러리 소개 Config 라이브러리는 CodeIgniter 프레임워크의 구성 요소로 코드를 구성하고 관리하는 데 사용됩니다. 구성 라이브러리에는 많은 내용이 포함되어 있습니다.
