찾다
백엔드 개발PHP 튜토리얼교리 단체에서 특성을 사용합니다

교리 단체에서 특성을 사용합니다 키 테이크 아웃

PHP 5.4.0 이후에 사용할 수있는 특성은 다른 클래스 내에 메소드 세트를 포함하여 코드 반복을 줄여 코드를 재사용하는 방법을 제공합니다. 그들은 교체 환경에서 교리 orm과 함께 사용될 수 있습니다.

. 특성은 인터페이스와 혼동되어서는 안됩니다. 인터페이스는 객체가 할 수있는 일을 나타내는 계약이지만, 특성은 물체에 할 수있는 능력을 제공합니다.

특성은 데이터베이스 아키텍처를 구성하고 코드 복제를 피하는 데 특히 유용 할 수 있습니다. 예를 들어, 'create_at'및 'updated_at'필드가 필요한 기사 및 주석 엔티티를 만들 때 이러한 공통 속성은 반복을 피하기 위해 특성에 포함될 수 있습니다.
    . 특성은 더 가볍고 유연한 코드를 생산하기위한 훌륭한 도구이지만 과도하게 사용해서는 안됩니다. 때로는 고유 한 클래스 구현을 구성하는 것이 좋습니다. 응용 프로그램을 올바르게 설계하는 데 충분한 시간이 걸리는 것이 중요합니다.
  • PHP 5.4.0 이후 PHP는 "TRACITS"라는 코드를 재사용하는 예쁜 방법을 지원합니다. 이는 자신을 반복하지 않기 위해 다른 클래스에 포함시킬 수있는 일련의 방법입니다. 이전에 게시 된 itepoint 게시물에서 특성에 대한 자세한 내용을 읽을 수 있습니다.
  • 오늘, 나는 그들이 Symfony 환경에서 교리 orm과 함께 어떻게 사용할 수 있는지 보여 드리겠습니다.
  • 특성 기본
  • 우리가 볼 수 있듯이, 기본 메소드 SayHello ()는 A 및 B 클래스에서 사용 명령문으로 구현 된 특성 내부에서 선언됩니다. 쉽지? 이 예는 실제로 짧지 만 특성으로 작업 할 기본 지식을 제공해야합니다.
  • 특성에 관심이 있다면 공식 문서와 이전에 게시 된 itepoint 게시물을 여기, 여기 및 여기에서 읽어 개념을 완전히 파악하는 것이 좋습니다.
  • 많은 사람들이 특성과 인터페이스의 차이를 보지 않는다는 사실에 대해 경고 할 수 있습니다. 실용적인 설명은 다음과 같습니다
  • 인터페이스는“이 객체 가이 일을 할 수있다”는 계약이며, 특성은 물체에 일을 할 수있는 능력을 제공하는 것입니다.
.

보다 심층적 인 설명을 위해 필립 브라운 (Philip Brown) 의이 통찰력있는 게시물을 자유롭게 살펴보십시오. 데이터베이스 아키텍처를 구성 할 때 코드 복제에 직면하는 것은 드문 일이 아닙니다. 예를 들어, 일반적인 블로그 응용 프로그램을 개발해야한다고 가정 해 봅시다. 어느 시점에서, 우리는 기본 기사 엔티티와 댓글 엔티티를 만들 것입니다.

. 두 엔티티는 모두 생성 된 혜택을 얻을 수 있습니다. 그러나 특성을 파헤 치기 전에, 우리가 그들없이 교리로 그 실체를 어떻게 지을 수 있는지 봅시다. 교리 단체에서 특성을 사용합니다.1 단계 : 엔티티를 만듭니다 기사 엔티티

주석 엔티티

동일한 속성 $ createat 및 $ updatedat가 두 클래스에 모두 포함됩니다. 이것은 건조하지 않습니다. 특성 이이 코드를 청소하는 데 도움이 될까요?

2 단계 : 특성을 만듭니다
<span><span><?php </span></span><span><span>trait ExampleTrait {
</span></span><span>    <span>public function sayHello() {
</span></span><span>        <span>echo "Hello";
</span></span><span>    <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>class A {
</span></span><span>    <span>use ExampleTrait;
</span></span><span><span>}
</span></span><span>
</span><span><span>class B {
</span></span><span>    <span>use ExampleTrait;
</span></span><span><span>}
</span></span><span>
</span><span><span>$one = new A();
</span></span><span><span>$one->sayHello();    /* return `Hello` */
</span></span><span>
</span><span><span>$two = new B();
</span></span><span><span>$two->sayHello();    /* return `Hello`, too */</span></span></span>
다음은 초기 복제 코드를 이동 한 예쁜 특성 파일입니다. $ createdAt 및 $ updatedat와 모든 관련된 방법은 이제 엔티티와 분리됩니다. 결과적으로 다른 곳에서 사용하는 것이 훨씬 쉽습니다. 키워드 사용이 포함 된 소개 섹션을 기억하십시오. <h3> 3 단계 : 엔티티를 리팩터 </h3> 기사 엔티티 <pre class="brush:php;toolbar:false"><span><span><?php </span></span><span><span>namespace Blog<span>\AppBundle\Entity</span>; </span></span><span> </span><span><span>use Doctrine<span>\ORM\Mapping</span> as ORM; </span></span><span> </span><span><span>/** </span></span><span><span> * @ORM\Table(name="article") </span></span><span><span> * @ORM\Entity(repositoryClass="Blog\AppBundle\Entity\ArticleRepository") </span></span><span><span> */ </span></span><span><span>class Article </span></span><span><span>{ </span></span><span> <span>/** </span></span><span><span> * @ORM\Column(name="idArticle" type="integer") </span></span><span><span> * @ORM\Id() </span></span><span><span> * @ORM\GeneratedValue(strategy="AUTO") </span></span><span><span> */ </span></span><span> <span>private $id; </span></span><span> </span><span> <span>/* Other properties you need in your entity: $title, $content, $author... */ </span></span><span> </span><span> <span>/** @ORM\Column(name="created_at" type="datetime") */ </span></span><span> <span>private $createdAt; </span></span><span> </span><span> <span>/** @ORM\Column(name="updated_at" type="datetime") */ </span></span><span> <span>private $updatedAt; </span></span><span> </span><span> <span>/* Getters & Setters */ </span></span><span><span>}</span></span></span>

주석 엔티티

완료! 명령 줄을 사용해 봅시다. 먼저 데이터베이스에서 엔티티를 만들어 봅시다 :

<span><span><?php </span></span><span><span>namespace Blog<span>\AppBundle\Entity</span>;
</span></span><span>
</span><span><span>use Doctrine<span>\ORM\Mapping</span> as ORM;
</span></span><span>
</span><span><span>/**
</span></span><span><span> * @ORM\Table(name="comment")
</span></span><span><span> * @ORM\Entity(repositoryClass="Blog\AppBundle\Entity\CommentRepository")
</span></span><span><span> */
</span></span><span><span>class Comment
</span></span><span><span>{
</span></span><span>    <span>/**
</span></span><span><span>     * @ORM\Column(name="idComment" type="integer")
</span></span><span><span>     * @ORM\Id()
</span></span><span><span>     * @ORM\GeneratedValue(strategy="AUTO")
</span></span><span><span>     */
</span></span><span>    <span>private $id;
</span></span><span>
</span><span>    <span>/* Other properties you need in your entity */
</span></span><span>
</span><span>    <span>/** @ORM\Column(name="created_at" type="datetime") */
</span></span><span>    <span>private $createdAt;
</span></span><span>
</span><span>    <span>/** @ORM\Column(name="updated_at" type="datetime") */
</span></span><span>    <span>private $updatedAt;
</span></span><span>
</span><span>    <span>/* Getters & Setters */
</span></span><span><span>}</span></span></span>
이 명령은 다음과 같습니다

이제이 클래스에서 새 개체를 만들려면 모두 공통 방법을 사용할 수 있음을 알게 될 것입니다.

분명히, 우리는 이제 데이터를 지속 할 준비가되었습니다.

더 나아가 현재, Symfony 구에서 많은 번들과 확장은 이러한 일을하는 방식을 고수하는 경향이 있습니다. Knplabs의 교리 적 비하비어 라이브러리는 엔티티와 리포지토리를위한 훌륭한 특성 모음을 제공합니다. 같은 마음의 상태에서, 나는 당신이 잘 알려진 교리 혁신 번들, 특히 타임 스탬블 동작 확장에 관한 모든 것을 심도있게 보는 것이 좋습니다.

.

최종 생각 특성은 흡수하기가 어렵지 않습니다. 그들은 더 가볍고 유연한 코드를 생산하는 훌륭한 방법입니다. 그들을 남용하지 않도록주의하십시오. 때로는 고유 한 클래스 구현을 구성하는 것이 좋습니다. 앱을 올바르게 디자인하기 위해 충분한 시간을 소비하는 것이 얼마나 중요한지 강조 할 수 없습니다. 그들이 당신을 도울 수 있다고 생각한다면 그들에게 가십시오. 당신의 것을 만들고, 테스트하고 당신이 그들을 어떻게 사용했는지 알려주세요!

교리 단체에서 특성을 사용하는 것에 대한 자주 묻는 질문 (FAQ) 교리 단체에서 특성을 사용하면 어떤 이점이 있습니까?
<span><span><?php </span></span><span><span>// src/Blog/AppBundle/Entity/Traits/TimestampableTrait.php
</span></span><span>
</span><span><span>namespace Blog<span>\AppBundle\Entity\Traits</span>;
</span></span><span>
</span><span><span>use Doctrine<span>\ORM\Mapping</span> as ORM;
</span></span><span>
</span><span><span>trait TimestampableTrait
</span></span><span><span>{
</span></span><span>    <span>/**
</span></span><span><span>     * <span>@var datetime $createdAt
</span></span></span><span><span>     *
</span></span><span><span>     * @ORM\Column(name="created_at", type="datetime")
</span></span><span><span>     */
</span></span><span>    <span>private $createdAt;
</span></span><span>
</span><span>    <span>/**
</span></span><span><span>     * <span>@var datetime $updatedAt
</span></span></span><span><span>     *
</span></span><span><span>     * @ORM\Column(name="updated_at", type="datetime")
</span></span><span><span>     */
</span></span><span>    <span>private $updatedAt;
</span></span><span>
</span><span>
</span><span>    <span>/**
</span></span><span><span>     * Get createdAt
</span></span><span><span>     *
</span></span><span><span>     * <span>@return datetime
</span></span></span><span><span>     */
</span></span><span>    <span>public function getCreatedAt()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->createdAt;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>/**
</span></span><span><span>     * Set createdAt
</span></span><span><span>     *
</span></span><span><span>     * <span>@param datetime $createdAt
</span></span></span><span><span>     */
</span></span><span>    <span>public function setCreatedAt($createdAt)
</span></span><span>    <span>{
</span></span><span>        <span>$this->createdAt = $createdAt;
</span></span><span>
</span><span>        <span>return $this;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>/**
</span></span><span><span>     * Get updatedAt
</span></span><span><span>     *
</span></span><span><span>     * <span>@return datetime
</span></span></span><span><span>     */
</span></span><span>    <span>public function getUpdatedAt()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->updatedAt;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>/**
</span></span><span><span>     * Set updatedAt
</span></span><span><span>     *
</span></span><span><span>     * <span>@param datetime $updatedAt
</span></span></span><span><span>     */
</span></span><span>    <span>public function setUpdatedAt($updatedAt)
</span></span><span>    <span>{
</span></span><span>        <span>$this->updatedAt = $updatedAt;
</span></span><span>
</span><span>        <span>return $this;
</span></span><span>    <span>}
</span></span><span><span>}</span></span></span>

교리 단체의 특성은 여러 상속을 지원하지 않는 PHP와 같은 언어로 코드를 재사용하는 방법을 제공합니다. 추가 기능을 제공하기 위해 다른 클래스에 삽입 할 수있는 재사용 가능한 코드 스 니펫을 만들 수 있습니다. 이로 인해 여러 클래스에서 코드를 복제하는 것을 피할 수 있으므로 클리너가 클리너, 유지 관리 가능한 코드로 이어질 수 있습니다. 특성은 또한 사용 된 클래스의 방법을 무시하는 데 사용될 수 있으며, 유연한 방식으로 동작을 수정하기위한 강력한 도구를 제공합니다. 교리 단체에서 특성을 사용하는 방법은 무엇입니까?

교리 실체에서 특성을 사용하려면 먼저 특성을 정의해야합니다. 이것은 특성 키워드를 사용하여 수행되며, 특성의 이름과 특성이 제공하는 메소드 및 속성을 포함하는 코드 블록이 이어집니다. 특성이 정의되면 클래스 정의 안에 사용 명령문을 추가 한 다음 특성 이름을 추가하여 클래스에서 사용할 수 있습니다. 이것은 수업에서 이용 가능한 특성의 모든 방법과 속성을 만들어 줄 것입니다.

단일 교리 실체에서 여러 특성을 사용할 수 있습니까?

예, 단일 교리에서 여러 특성을 사용할 수 있습니다. 실재. 이는 클래스 정의 내부에 여러 사용 문을 추가 한 다음 각 특성의 이름을 추가하여 수행됩니다. 모든 특성의 방법과 속성은 수업에서 사용할 수 있습니다. 다른 특성의 방법이나 속성 사이에 명명 충돌이있는 경우, 대신 대신 및 연산자를 사용하여이를 해결할 수 있습니다.

특성이 서비스를 주입했을 수 있습니까?

특성 자체는 서비스를 직접 주입 할 수 없습니다. , 그들은 클래스가 아니며 생성자 주입을 지원하지 않기 때문에. 그러나 특성을 사용하는 클래스에 서비스를 주입 할 수 있습니다. 특성의 방법은 수업을 통해 이러한 서비스에 액세스 할 수 있습니다.

교리 단체에서 특성을 재정의 할 수 있습니까?

예, 특성은 사용 된 클래스의 방법을 무시할 수 있습니다. 클래스의 메소드와 동일한 이름의 특성에서 메소드를 정의하여 수행됩니다. 클래스의 객체에서 메소드가 호출되면 클래스의 버전 대신 특성의 버전이 사용됩니다.

상속과 함께 특성을 사용할 수 있습니까? , 상속과 함께 특성을 사용할 수 있습니다. 수업은 부모 수업에서 상속받을 수 있으며 하나 이상의 특성을 사용할 수 있습니다. 부모 클래스와 특성의 방법과 속성은 모두 수업에서 사용할 수 있습니다. 부모 클래스와 특성의 방법이나 속성 사이에 명명 충돌이있는 경우 특성의 버전이 사용됩니다.

특성 사용에 대한 제한이나 단점이 있습니까? 특성은 코드 재사용 및 유연성을위한 강력한 도구를 제공하며 몇 가지 제한 사항과 잠재적 단점도 있습니다. 한 가지 제한은 특성을 스스로 인스턴스화 할 수 없다는 것입니다. 클래스 내에서만 사용할 수 있습니다. 또한 여러 특성이 동일한 이름의 메소드를 정의하는 경우 수동으로 해결 해야하는 이름 지정 충돌이있을 수 있습니다. 특성을 과도하게 사용하면 이해하고 유지하기 어려운 코드로 이어질 수 있으므로 신중하게 사용해야합니다.

특성을 사용하는 교리 실체를 어떻게 테스트합니까?

특성을 사용하는 교리 실체를 테스트하는 것은 정기적 인 교리 실체를 테스트하는 것과 유사합니다. 엔티티를 인스턴스화하고 방법을 호출하는 단위 테스트를 생성하여 예상대로 작동하는지 확인할 수 있습니다. 특성이 추가 방법을 제공하는 경우 동일한 방식으로 테스트 할 수 있습니다. 특성이 엔티티의 메소드를 재정의하는 경우 원래 버전의 메소드 버전 (특성을 사용하지 않는 엔티티에서 테스트 함)과 재정의 버전 (특성을 사용하는 엔터티에서 테스트 함)을 테스트해야합니다. .

교리 단체에서 Symfony와 함께 특성을 사용할 수 있습니까?

예, 교리 단체에서 Symfony와 함께 특성을 사용할 수 있습니다. Symfony의 교리 통합은 실체의 특성 사용을 지원합니다. 당신은 당신의 특성을 정의하고, 당신의 엔티티에서 그것들을 사용할 수 있으며, Symfony는 당신의 엔티티와 함께 ​​일할 때 그것을 인식하고 사용할 것입니다.

교리 단체의 특성에 대한 문제를 어떻게 디버그 하는가?

디버깅 문제 교리 단체에 특성이있는 것은 정기적 인 교리 단체와의 디버깅 문제와 유사합니다. XDEBUG 및 VAR_DUMP ()와 같은 도구를 사용하여 엔티티의 상태를 검사하고 어떤 방법과 속성이 있는지 확인할 수 있습니다. 메소드가 예상대로 작동하지 않으면 엔티티 자체, 특성 또는 부모 클래스에서 정의되어 있는지 확인하고 그에 따라 디버그 할 수 있습니다.

위 내용은 교리 단체에서 특성을 사용합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
unset ()와 session_destroy ()의 차이점은 무엇입니까?unset ()와 session_destroy ()의 차이점은 무엇입니까?May 04, 2025 am 12:19 AM

thedifferencebetweenUnset () andsession_destroy () istssection_destroy () thinatesTheentiresession.1) TEREMOVECIFICESSESSION 'STERSESSIVEBLESSESSIVESTIETSTESTERSALLS'SSOVERSOLLS '를 사용하는 것들

로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?May 04, 2025 am 12:16 AM

stickysessionsureSureSureRequestSaroutEdToTheSERSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESINCENSENCY

PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?May 04, 2025 am 12:14 AM

phpoffersvarioussessionsaveAndlers : 1) 파일 : 기본, 단순, 단순한 BUTMAYBOTTLENECKONHIGH-TRAFFICSITES.2) MEMCACHED : 고성능, IdealForspeed-CriticalApplications.3) Redis : SimilartomemCached, WithaddedPersistence.4) 데이터베일 : OffforIntegrati

PHP의 세션은 무엇이며 왜 사용됩니까?PHP의 세션은 무엇이며 왜 사용됩니까?May 04, 2025 am 12:12 AM

PHP의 세션은 여러 요청간에 상태를 유지하기 위해 서버 측의 사용자 데이터를 저장하는 메커니즘입니다. 구체적으로, 1) 세션은 session_start () 함수에 의해 시작되며 데이터는 $ _session Super Global Array를 통해 저장되어 읽습니다. 2) 세션 데이터는 기본적으로 서버의 임시 파일에 저장되지만 데이터베이스 또는 메모리 스토리지를 통해 최적화 할 수 있습니다. 3) 세션은 사용자 로그인 상태 추적 및 쇼핑 카트 관리 기능을 실현하는 데 사용될 수 있습니다. 4) 세션의 보안 전송 및 성능 최적화에주의를 기울여 애플리케이션의 보안 및 효율성을 보장하십시오.

PHP 세션의 수명주기를 설명하십시오.PHP 세션의 수명주기를 설명하십시오.May 04, 2025 am 12:04 AM

phpsessionsStartWithSession_start (), whithesauniqueIdAndCreatesErverFile; thepersistacrossRequestSandCanBemanBledentSandwithSession_destroy ()

절대 세션 타임 아웃의 차이점은 무엇입니까?절대 세션 타임 아웃의 차이점은 무엇입니까?May 03, 2025 am 12:21 AM

절대 세션 시간 초과는 세션 생성시 시작되며, 유휴 세션 시간 초과는 사용자가 작동하지 않아 시작합니다. 절대 세션 타임 아웃은 금융 응용 프로그램과 같은 세션 수명주기의 엄격한 제어가 필요한 시나리오에 적합합니다. 유휴 세션 타임 아웃은 사용자가 소셜 미디어와 같이 오랫동안 세션을 활성화하려는 응용 프로그램에 적합합니다.

세션이 서버에서 작동하지 않으면 어떤 조치를 취 하시겠습니까?세션이 서버에서 작동하지 않으면 어떤 조치를 취 하시겠습니까?May 03, 2025 am 12:19 AM

서버 세션 고장은 다음 단계를 따라 해결할 수 있습니다. 1. 서버 구성을 확인하여 세션이 올바르게 설정되었는지 확인하십시오. 2. 클라이언트 쿠키를 확인하고 브라우저가 지원하는지 확인하고 올바르게 보내십시오. 3. Redis와 같은 세션 스토리지 서비스가 정상적으로 작동하는지 확인하십시오. 4. 올바른 세션 로직을 보장하기 위해 응용 프로그램 코드를 검토하십시오. 이러한 단계를 통해 대화 문제를 효과적으로 진단하고 수리 할 수 ​​있으며 사용자 경험을 향상시킬 수 있습니다.

session_start () 함수의 중요성은 무엇입니까?session_start () 함수의 중요성은 무엇입니까?May 03, 2025 am 12:18 AM

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.