Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:94913 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 45961 invoked from network); 8 Aug 2016 10:45:20 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 8 Aug 2016 10:45:20 -0000 Received: from [127.0.0.1] ([127.0.0.1:18674]) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ECSTREAM id F8/1A-33134-0C268A75 for ; Mon, 08 Aug 2016 06:45:20 -0400 Authentication-Results: pb1.pair.com smtp.mail=marijic.silvio@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=marijic.silvio@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.214.49 as permitted sender) X-PHP-List-Original-Sender: marijic.silvio@gmail.com X-Host-Fingerprint: 209.85.214.49 mail-it0-f49.google.com Received: from [209.85.214.49] ([209.85.214.49:35588] helo=mail-it0-f49.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 4B/0A-33134-87F58A75 for ; Mon, 08 Aug 2016 06:31:22 -0400 Received: by mail-it0-f49.google.com with SMTP id u186so70173086ita.0 for ; Mon, 08 Aug 2016 03:31:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=TAq5Ma48WavX9RujxZmqOqRn5TzWCVINKcAqOVRD0Vg=; b=xQ/XyRPQByyGl+tGZiDO2aQuQBc9/SuVef8O7VEjPkqOV1jiWPusWulKPXQxrksjfe 4S4YzBurfBYVp6F3YQcevH4zPdG2vV9Pk3gnLeD+jVU3vgg8s0+OcEVSi3lw0z8KTLD2 qaxmwFtBJotuloLOOUrsu+XXQer1PGx+Ds3iUjqRbv+qfeVEUo+A9PSQshkXgUqNu//D WNbYroGDF1lECVicK9NNuNn6DHE1tMYMpKAnpb9UcAJP0HEqHuLLDGXvSH+DS6DCsmPY CyAHlTVNQ69XgD1xt35dMjaO2eUO0gQB0ug/P8xRAqyFd+ppnlNu2RDaKuMCaUzFcoYX F1gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=TAq5Ma48WavX9RujxZmqOqRn5TzWCVINKcAqOVRD0Vg=; b=BCcA/9CggH9gl0RyCpkiuDdo0PxRzsfL/kzMIOLBj95faNIctjMUBaL3dZ4gYDL+au TyxJzczVho6Lol4sTvI2kyhIqZgYj9Vr9sIxp1UVkmpiDu7gcrOnZIfldFuUzpT9JiaB 6BvBFO09lxU8mt/cZ183jsL+jb8wyYX5uVOXa+S7CdPRWmjk/OgKnGxwmtsPXFabj6t5 r99jLI2o6aryCBs8LXOii0dNRCQawGmqUwbB7s8+ckUpHNOKVFJjaagsnEn/PzZQKQ1Q sqWy8M2+ipO2zzPM720G1rrhdJrhsXzSpCOUwPdxX51gNdsRaIDFVdeFXrJWt/8zvaVb CxRQ== X-Gm-Message-State: AEkooutIzYi3egU1dXYQ2tJQS+iFQ1UxW4gQlgqv3cWJCchb+eUbWeTWfZQOVMX7teTpuSvpo/nODyHuc8mH2Q== X-Received: by 10.36.152.5 with SMTP id n5mr16260545itd.79.1470652278248; Mon, 08 Aug 2016 03:31:18 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.239.133 with HTTP; Mon, 8 Aug 2016 03:31:03 -0700 (PDT) Date: Mon, 8 Aug 2016 12:31:03 +0200 Message-ID: To: internals@lists.php.net Content-Type: multipart/alternative; boundary=94eb2c05f7f8a2211a05398cea6a Subject: RFC - Immutable classes From: marijic.silvio@gmail.com (=?UTF-8?Q?Silvio_Mariji=C4=87?=) --94eb2c05f7f8a2211a05398cea6a Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, I would need your help with one idea. I'm working on one RFC that I'm would like to submit. Idea is that after you initialize object eg. after constructor returns, object would be locked, and you wouldn't be able to change properties on that object anymore. It would like this: public $email; > public function __construct($email){ > $this->email =3D $email; > } > } > $email =3D new Email("example@email.com"); After instance of class is created, object is "frozen" so call like this $email->email =3D "new@email.com"; Would result in error. I have already implementation up to certain degree, but I need one advice from more experienced developers. Where is the place where I could put logic to lock object after the constructor has finished? Maybe in zend vm on ZEND_NEW token? Some constraints are needed: 1. Child class that extends immutable class must be defined as immutable also. 2. If property on immutable class contains object, it must be instance of immutable class. 3. You can not have immutability per property, it either whole class or none. Thank you all in advance. --=20 Silvio Mariji=C4=87 Software Engineer 2e Systems --94eb2c05f7f8a2211a05398cea6a--