찾다
PHP 프레임워크LaravelLaravel의 후기 정적 바인딩

Laravel의 후기 정적 바인딩

Oct 23, 2019 pm 01:43 PM
laravel

PHP의 새로운 정적 지연 정적 바인딩 또는 후기 정적 바인딩과 관련하여 Laravel에서 사용 문제가 발생했습니다. 다음과 같이 Laravel에서 새로운 데이터를 추가하기 위해 Model을 호출할 때, 먼저 하위 테이블을 얻기 위해 Model에 메소드를 추가해야 합니다:

protected function addToMessage($msgType, $userID, $commentID, $replyCommentID, $replyUserID, $gameID)
{
    if (!$userID) {
        return false;
    }
 
    $table = 't_message_' . hashID($userID, 100);
    $this->message->setTable($table)->create([
        'msg_type'         => $msgType,
        'user_id'          => $userID,
        'comment_id'       => $commentID,
        'reply_comment_id' => $replyCommentID,
        'reply_user_id'    => $replyUserID,
        'game_id'          => $gameID,
        'is_read'          => 0,
        'created_at'       => date('Y-m-d H:i:s'),
    ]);
    return true;
}

여기서 setTable 메소드는 Model에서 정의한 메소드와 같습니다. the sub-table: # 🎜🎜#

public function setTable($table)
{
    $this->table = $table;
    return $this;
}

에러 로그를 보면 $this->table이 적용되지 않는 것을 확인했지만 실제로 create 메소드를 호출하기 전에 테이블 이름을 출력하면 $this->가 여기서 호출되는 이유는 무엇입니까? 테이블이 재설정되지 않았습니까?

여기서 $this->message는 Model 클래스를 상속하는 모델 클래스입니다. 여기서 create 메소드는

public static function create(array $attributes = [])
{
    $model = new static($attributes);
 
    $model->save();
 
    return $model;
}

이 VendorlaravelframeworksrcIlluminateDatabaseEloquentModel.php Line 557에 있습니다.#🎜 🎜##🎜 🎜#Laravel 프레임워크의 Model 클래스는 추상 유형이므로 PHP의 추상 클래스는 새로운 정적 후기 정적 바인딩을 사용하여 인스턴스화할 수 있으며 create 메소드의 $model = new static($attributes)은 실제로 다시 인스턴스화되고 반환되지만 호출자의 Model 클래스는 테이블 속성을 정의하지 않으므로 $this->table에는 현재 값이 없습니다.

해결 방법은 그림과 같이 저장 방법을 사용하는 것입니다. 실제로 create 메소드는 save 메소드도 호출합니다. Laravel의 후기 정적 바인딩

Experiment

추상 클래스 A에는 지연된 정적 바인딩을 통해 인스턴스화되고 반환되는 create 메서드가 있습니다. 클래스 B는 A를 상속하고 상위 클래스의 name 속성은 테스트 메서드에서 수정됩니다.

<?php
 
abstract class A
{
    protected $name = "tanteng";
 
    public static function create()
    {
        return new static();
    }
}
 
class B extends A
{
    //protected $name = &#39;纸牌屋弗兰克&#39;;
 
    public function test()
    {
        $this->name = "Tony Tan";
        return $this;
    }
}
 
$obj1 = (new B)->test();
$obj2 = (new B)->test()->create();
var_dump($obj1);
var_dump($obj2);

결과에 따르면 $obj1과 $obj2의 인스턴스는 모두 B의 인스턴스입니다. 테스트 메소드를 호출하여 속성 이름이 변경되었지만 create 메소드를 호출한 후에는 name 속성이 변경되지 않았습니다. . 이 글에서 언급한 라바렐에서 마주한 장면이 바로 이것이다. (여기서 주석을 켜면 인쇄된 이름이 다시 작성된 값입니다)

추상 클래스 A를 일반 클래스로 변경하고 인스턴스화를 위해 new static을 new self로 변경하면 결과는 인쇄된 속성 이름은 모두 해당 클래스의 속성입니다.

더 많은 Laravel 관련 기술 기사를 보려면

Laravel 프레임워크 시작 튜토리얼

컬럼을 방문하여 알아보세요!

위 내용은 Laravel의 후기 정적 바인딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Laravel 사용 : PHP로 웹 개발을 간소화합니다Laravel 사용 : PHP로 웹 개발을 간소화합니다Apr 19, 2025 am 12:18 AM

Laravel은 다음을 포함하여 웹 개발 프로세스를 최적화합니다. 1. 라우팅 시스템을 사용하여 URL 구조를 관리합니다. 2. 블레이드 템플릿 엔진을 사용하여보기 개발을 단순화하십시오. 3. 대기열을 통해 시간이 많이 걸리는 작업을 처리합니다. 4. eloquentorm을 사용하여 데이터베이스 작업을 단순화하십시오. 5. 모범 사례를 따라 코드 품질과 유지 관리를 향상시킵니다.

Laravel : PHP 웹 프레임 워크 소개Laravel : PHP 웹 프레임 워크 소개Apr 19, 2025 am 12:15 AM

Laravel은 강력한 도구 세트를 제공하고 개발 프로세스를 단순화하며 코드의 유지 관리 및 확장 성을 향상시키는 최신 PHP 프레임 워크입니다. 1) Eloquentorm은 데이터베이스 작업을 단순화합니다. 2) 블레이드 템플릿 엔진은 프론트 엔드 개발을 직관적으로 만듭니다. 3) 장인 명령 라인 도구는 개발 효율성을 향상시킵니다. 4) 성능 최적화에는 MVC 아키텍처, 대기열 처리 및 테스트 사례에 따라 열망, 캐싱 메커니즘 사용이 포함됩니다.

Laravel : MVC 아키텍처 및 모범 사례Laravel : MVC 아키텍처 및 모범 사례Apr 19, 2025 am 12:13 AM

Laravel의 MVC 아키텍처는 데이터 로직, 프리젠 테이션 및 비즈니스 처리의 분리를위한 모델, 뷰 및 컨트롤러를 통해 코드의 구조 및 유지 가능성을 향상시킵니다. 1) 모델은 데이터를 처리합니다. 2)보기는 디스플레이에 책임이 있습니다. 3) 컨트롤러는 사용자 입력 및 비즈니스 로직을 처리합니다. 이 아키텍처를 통해 개발자는 비즈니스 논리에 집중하고 코드의 Quagmire에 빠지지 않도록합니다.

Laravel : 주요 기능과 장점이 설명되었습니다Laravel : 주요 기능과 장점이 설명되었습니다Apr 19, 2025 am 12:12 AM

Laravel은 간결한 구문, 강력한 명령 줄 도구, 편리한 데이터 작동 및 유연한 템플릿 엔진을 갖춘 MVC 아키텍처를 기반으로하는 PHP 프레임 워크입니다. 1. 우아한 구문과 사용하기 쉬운 API는 개발이 빠르고 사용하기 쉽습니다. 2. Artisan Command Line 도구는 코드 생성 및 데이터베이스 관리를 단순화합니다. 3. eloquentorm은 데이터 작업을 직관적이고 간단하게 만듭니다. 4. 블레이드 템플릿 엔진은 고급 뷰 로직을 지원합니다.

Laravel과 함께 백엔드 구축 : 가이드Laravel과 함께 백엔드 구축 : 가이드Apr 19, 2025 am 12:02 AM

Laravel은 우아한 구문, 풍부한 기능 및 강력한 커뮤니티 지원을 제공하기 때문에 백엔드 서비스 구축에 적합합니다. 1) Laravel은 MVC 아키텍처를 기반으로 개발 프로세스를 단순화합니다. 2) eloquentorm이 포함되어 있으며 데이터베이스 작업을 최적화합니다. 3) Laravel의 생태계는 장인, 블레이드 및 라우팅 시스템과 같은 도구를 제공하여 개발 효율성을 향상시킵니다.

라 라벨 프레임 워크 기술 공유라 라벨 프레임 워크 기술 공유Apr 18, 2025 pm 01:12 PM

이 지속적인 기술 발전 시대에, Mastering Advanced Frameworks는 현대 프로그래머에게 중요합니다. 이 기사는 Laravel 프레임 워크에서 거의 알려지지 않은 기술을 공유하여 개발 기술을 향상시키는 데 도움이됩니다. 우아한 구문과 광범위한 기능으로 유명한이 기사는 강력한 기능을 파고 효율적이고 유지 관리 가능한 웹 애플리케이션을 만드는 데 도움이되는 실용적인 팁과 요령을 제공합니다.

Laravel과 ThinkPhp의 차이점Laravel과 ThinkPhp의 차이점Apr 18, 2025 pm 01:09 PM

Laravel과 ThinkPHP는 모두 인기있는 PHP 프레임 워크이며 개발에 고유 한 장점과 단점이 있습니다. 이 기사는 두 가지 깊이를 비교하여 건축, 기능 및 성능 차이를 강조하여 개발자가 특정 프로젝트 요구에 따라 정보에 입각 한 선택을 할 수 있도록 도와줍니다.

Laravel 사용자 로그인 기능 목록Laravel 사용자 로그인 기능 목록Apr 18, 2025 pm 01:06 PM

Laravel에서 사용자 로그인 기능을 구축하는 것은 중요한 작업 이며이 기사는 사용자 등록에서 로그인 검증에 이르기까지 모든 중요한 단계를 다루는 포괄적 인 개요를 제공합니다. 우리는 Laravel의 내장 검증 기능의 힘을 발휘하고 특정 요구에 맞게 로그인 프로세스를 사용자 정의하고 확장하는 것을 안내합니다. 이 단계별 지침을 따르면 Laravel 애플리케이션 사용자에게 완벽한 액세스 경험을 제공하는 안전하고 안정적인 로그인 시스템을 만들 수 있습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는