 Selamat datang kembali dari PIZZA Mini Break. Maaf, ia mengambil masa untuk PIZZA datang. Saya berharap ia akan bagus atau... Orang-orang akan mempunyai PIZZA, orang-orang akan dapat. Baiklah, itu bagus. Saya bercakap tentang apa yang baru di PHP 7.3. Siapa di sini menggunakan PHP 5? Beri tangan kamu, masih di PHP 5. Baiklah, apa perjalanan PHP 5.6? Apa yang berlaku dengan PIZZA 5.6? Baiklah, orang lain akan menerima tangan kamu. Siapa yang lain akan menerima tangan kamu? PHP 5? Baiklah, PIZZA 5.6. Masih baik-baik saja. Tapi ini sudah akhir hidup beberapa hari lalu. Siapa di sini menggunakan PIZZA 7.0 atau PHP 7? Siapa di sini menggunakan PIZZA 7? Apa perjalanan yang kamu berlaku dengan? PIZZA 7.2. Baiklah, PIZZA 7.2. Baiklah, itu bagus. PIZZA 5.6 berlaku beberapa hari lalu pada 31 bulan 2018. Pada tahun baru, PIZZA 5.6 berlaku, tidak ada perjalanan keadaan dan sebagainya. Untuk PIZZA 7.0, saya rasa berada sahaja di sekolah keadaan. Saya akan main-mainien fokus pada perut perkembangan berdasarkan PIZZA 7.2 sebagainya dan PIZZA 7.3. Terutama, PIZZA 7.3 kini telah menyebak dan menabok kepada semua orang. Jadi, anda boleh menggunakan PIZZA 7.3. Saya akan bercakap tentang 3 perkara yang penting untuk PHP 7.3. Pertama adalah performa yang terbaik untuk PHP 7.3. Kita mempunyai perubahan yang penting daripada 5.6 hingga 7.0. Ini adalah jemput besar kerana bagaimana pasangan AST telah berubah. Dan banyak perkara yang digunakan oleh kode telah berubah. Jadi banyak perubahan dalam PHP 7.0. Jadi ada beberapa perubahan dan PHP selalu berubah. Kod telah berubah, dua atau tiga perubahan masih bekerja keras dan bekerja pada PHP. Kemudian ada perubahan yang baru dalam PHP 7.3. Ia disebut monotomik timur. Dan yang terakhir yang akan saya bercakap tentang adalah perubahan dan sokongan untuk PHP 7.3. Pertama adalah perubahan yang berubah dalam PHP 7.3. Siapa yang menikmati perubahan yang lebih baik di sini? Saya akan menyebabkan yang lain. Ada beberapa perubahan yang dibuat dalam PHP 7.3. Anda juga dapat melihat ini sedikit. Ada beberapa artikel di sini. Saya membuat beberapa perubahan. Jadi saya membuat perubahan ini. Dishto Ocean Server. Saya rasa itu 64GB mempunyai kursus 32GB. Jadi saya membuat perubahan untuk satu jam. Saya tidak dapat memasangkan lebih daripada itu. Ia seperti $1 per jam. Saya membuat perubahan. Saya menulis beberapa perubahan. Saya membuat perubahan untuk beberapa perkara dari PHP 7.3. Saya juga mempunyai perubahan untuk 7.2. Saya membuat perubahan untuk kedua. Saya membuat perubahan dan menarik. Ada beberapa pula perubahan yang tidak berlaku. Mereka dibuat dalam perubahan. Memang, ia dibuat di bawah bawah bawah bawah. Ia dibuat di bawah bawah bawah bawah bawah bawah bawah bawah bawah bawah bawah bawah. adalah sesuatu yang terserahkan kode PHP ke dalam semula, ke dalam semula perjalanan. Jadi di PHP 7.2, perkara ini tidak sangat menarik. Jadi ada beberapa perjalanan kepadanya, dapat mengambil beberapa kes kesejaan. Jadi ada beberapa perkara yang apabila anda mempunyai kode dan terserahkan kode dan kondisi. Apabila anda mempunyai kode dan terserahkan kode, PHP mungkin tidak dapat mempunyai kode. Jika anda mempunyai kode yang sangat teruk, tetapi tidak akan memperkenalkan performa yang terbaik. Jadi apabila anda memperkenalkan kode dan terserahkan kode, apabila anda memperkenalkan kode dari PHP 7.2 ke 7.3, maka kode anda tidak sangat baik. Jadi ada beberapa perjalanan yang tidak menarik. Saya memperkenalkan kode selama 40 saat. Jadi ada satu atau dua saat yang berbeza daripada... tentu saja, 7.3 akan mempunyai lebih baik performa selama dua saat. Jadi kode yang memperkenalkan kode dari PHP 7.3 juga telah diperkenalkan. Kode yang memperkenalkan kode adalah sesuatu yang sangat menarik dan memperkenalkan kode. Kode mempunyai kode yang memperkenalkan kode. PHP mempunyai kode yang memperkenalkan kode juga. Untuk kode, kita menggunakan kode yang memperkenalkan kode. Anda dapat membaca pada kode yang berbeza, menerimanya bagaimana kode yang memperkenalkan kode. Dan ada kode yang memperkenalkan kode yang memperkenalkan kode yang memperkenalkan kode. Ini adalah satu yang diberi oleh penjara penjara di IBM. Kemudian mereka mengingat kode yang memperkenalkan kode di 5.6 atau 7.0, yang memperkenalkan performa selama banyak. Jadi ada beberapa perjalanan yang membuat kode yang memperkenalkan kode di 7.3. Kode memperkenalkan kode yang memperkenalkan kode yang memperkenalkan kode. Jadi saya menggunakan perjalanan yang memperkenalkan kode dan menemukan ada 4 atau 5 sengit yang berbeza antara memperkenalkan kode yang memperkenalkan kode. Yang sebenarnya adalah sesuatu yang anda mungkin mengetahui. Jadi banyak orang di sini menggunakan framework, seperti framework, kode yang memperkenalkan kode. Jadi apa framework yang anda gunakan? Larabel? Larabel. Okey. Sangat common. Saya gunakan... Maaf? Kode yang memperkenalkan kode. Oh, kode yang memperkenalkan kode. Saya rasa ia cukup okey, saya rasa. Tetapi saya tidak gunakan kode yang memperkenalkan kode. Jadi saya tidak pasti. Ya, saya juga gunakan Larabel, yang seperti kode yang memperkenalkan kode yang memperkenalkan kode sekarang, saya rasa. Jadi saya gunakan itu. Jadi apabila anda gunakan framework seperti ini, especially Larabel dan seperti itu, baginda mempunyai selepas ini, model view controller. Jadi model yang menggunakan rekod aktif. Rekod aktif dan Remix-nya terdapat pada rekod aktif. Jadi kita menggunakan kelas-kelas yang mempunyai kelas lain dan kelas yang tidak mengantar beberapa latihan yang sedap. Kadang-kadang, antipatensi ini dalam kode, yang anda mungkin tidak mengetahui, akan menyebabkan banyak konsumsi memori, atau hanya banyak bagajah dalam kode anda. Jadi apabila anda mempunyai kelas, mari saya menunjukkan diri bagi kelas manusia, bagi contoh kelas manusia. Mencari, tidak hanya lera-rera, jadi anda mempunyai kelas manusia di sini, bagaimananya menganggap kelas manusia. Di kode hati, ada kelas manusia dan menggunakan kelas yang dipanggil memo, jadi kelas ini dianggap kelas memo. Dalam kelas ini, anda memiliki kelas hubungan. Semua orang memerlukan kelas dan kelas. Semua orang sangat secara lelaki, dan semua orang tidak secara lelaki dengan kelas. Kalau anda terlalu lapar untuk kelas di atas, saya akan kini menjelaskan kelasan kita. Jadi, kelas ini seperti... Ia seperti kelas, tapi anda tidak memperkenalkan kelas. Oh, maaf, anda tidak memperkenalkan kelas. Sehingga anda dapat memperkenalkan kelas, anda dapat memperkenalkan kelas, anda dapat memperkenalkan kelas tersebut juga, tetapi untuk kelas, anda menggunakan kelas. Jadi, kelas dan atribut di dalam kelas, anda dapat menggunakan kelas memohon, anda dapat menggunakan kelas memohon, seperti dapat hubungan. Jadi, ini adalah kelas yang tidak mengalami apa-apa, tapi ini mengabukkan. Okey, ini betul. Saya rasa saya harus mengubah kelas tersebut, kerana... Okey, ini adalah kelas yang tidak mengalami. Okey, jadi anda dapat hubungan tersebut yang mengubah kelas. Kemudian anda mempunyai hubungan tersebut. Yang... Yang apa di dalam kelas? Okey, ini bukan hubungan tersebut. Okey, saya akan memperkenalkan itu. Saya tidak melihat itu. Jadi, sebenarnya anda mengubah hubungan tersebut. Jadi, dalam hubungan tersebut, hubungan ini adalah mengalami... perkara ini. Jadi, anda melihat hubungan tersebut. Jadi, dalam hubungan tersebut, anda mempunyai hubungan... dan anda mempunyai hubungan tersebut... dan kami mempunyai hubungan tersebut. Jadi, hubungan tersebut boleh menjadi seorang ibu... Reference, so the reference object which is another human as you can see and the reference name so will be a child, so let's say the first one is parent then the other one will be child, then if the first one is a child then the second one will be a parent, something like that, and then you can set the relationship reference in using this. Okay, then let's talk about cyclic references between objects which is the main thing that garbage collectors have a problem with, like there is this funny issue here you have, so looking, you got to memorize a bit of the sort of what I just now said about the relationships and the human classes and objects as well, so this, you have this object here, a human object which you also have another one, so the first one you take him as James, the second one Andy, then the first one will be a parent, will be a parent relationship and then the second one will be a child, so of course the relationship name is parent then the child one will be a relationship underscore reference underscore name. Then you have a grandparent here which is Mary, so Mary is also an object that we have instantiated, so it's the parent of James, you can see the relationship there and at the same time it shares a grandchild and a grandparent relationship, so you can notice the visible arrow, you can see a bit of the arrow there, so when you have a relationship between, so previously when it was just like that, you don't have a cyclic reference, so it's just a single way, it just transverses downwards, but if you have a relationship like that, that goes back upwards, you have a full circular reference, which if you think about it, jason doesn't support a circular structure, so if you were to translate all of this into an array and then print it out in jason, you'll get an error saying jason circular reference. So when you do this kind of stuff, it's like garbage collector would be like, okay what do I even clean up in the first place, if you delete something in between, where do the references go, how do you clean up all the child references. An example of this would be like that, you get a public function unset relationship references, so for each you get all the relationships as a relationship ref, because each relationship reference is a human object, so within the human object you get the relationship count, so like oh if there's a counter, then we have to recurs deeper, so we call itself again to transverse deeper, because when you have a parent and you have a child, you usually want to remove the child then followed by the parent, so if you kill the parent, there will be a memory leak, in C, where you do that you get a memory leak instantly. So in this case, if you do that to the object example I've done, it will just lead to an infinite loop. Everyone clear so far about how this circular reference thing works, so this is a problem for garbage collectors. So PHP solved that, like what I said before, and implemented that. So if you have this kind of references, like inevitably, I think if you have a huge code base which has active records models that shares relationships, one to many, many to one, many to many relationships, eventually you might hit a point which they all become circular references to each other, and when you want to print out all these results, PHP has to handle all these models and everything which is a huge headache for PHP itself, and it has to clean it up as well after you have used it all. So, looking at the difference between 7.2 and 7.3, there was an increase in performance speed because of how it has changed. But at the same time, because of this change, I've noticed something was that when it caught, I caught the unset and then I caught the garbage collector to come and clean up the memory. For my horrible code that I wrote, there was no issues with the cleanup in 7.2, like it took 70 seconds to clean up, which is horrendous. It's just a bunch of code that was horrible. But in 7.3, I faced issues with actually cleaning up the memory afterwards because of how it has changed. I simply just say, oh, 3 cannot work. It just throws me an error afterwards. So, there has been some enhancement. You can look at the C code if you want to look in deeper as to the changes. It's actually quite interesting if you have time to want to look at it. But I wouldn't dive too deep into this aspect because it might be a bit too long and boring. So, moving on from the garbage collection and the improvements of performance, especially in the models and classes and objects, we have this new feature, the mono-atomic timer. So, anyone here know what are mono-atomic timers? Anyone? Okay, I guess not. So, mono-atomic timers are timers that only go forward. So, for example, it just count 1, 2, 3, 4, and then it keep counting forward. So, even when there are scenarios where there are leap seconds, you know there are leap seconds, right? I think there was one that occurred previously and then CloudFare didn't handle it well and then there was an outage because of the leap seconds. It caused some issues because of their routers couldn't be able to handle leap seconds. There are code as well. Leap seconds are actually very painful things. Ya, and this kind of things actually happen quite often because of how time works. We can't really measure time very properly with seconds and stuff. There's always some differences here and there in terms of time. And of course, to resolve all of these issues with especially time sensitive things like databases that rely heavily on timestamps. For example, Google Cloud Spanner. Everyone heard of Google Cloud Spanner? Anyone? Okay. So, Cloud Spanner is basically a key value store which is kind of like Redis, but its primary key is timestamps. So, it retrieves the record based on timestamps and stuff like that. So, it relies heavily on mono-atomic timers and so they have mono-atomic clocks in fact, dedicated mono-atomic clocks, as well as GPS clocks, so to get very, very accurate times. But that's Google. We are probably not at a Google skill. But this is something very useful. For example, you can take... So, mono-atomic timers are a bit difficult to use as well. So, they return the number, they return ticks based on the startup of the hardware of the CPU. So, if you want to get 5 seconds in mono-atomic time, you need to do something like that. Start HR time, you call the function HR time through which returns a float number, and then end time, you sleep for 5 seconds, but do note that sleep functions, sleep for 5 seconds but it might be slightly longer than 5 seconds, maybe 5.001 or maybe lesser 4.9, something-something. So, sleep is not a very accurate thing. Maybe you want to do... Maybe you want to take an average or you can use microtime if you want, but you still have to take an average instead. And then once you get an average, you can take the 5 seconds in mono-atomic time and eventually you have your recipe for creating the next future cloud spanner but in PHP. So, this is something very interesting. Maybe some of you all here will be the potential future users of a PHP cloud spanner. And final thing I want to talk about in PHP 7.3 before everyone falls asleep is the deprecation and support for PHP 7.3. So, there has been some deprecation for OC-DC router and BERT-something router. So, they are like database adapters that has been deprecated and probably nobody even heard of it or users unless you're in an enterprise world for a very long time. But for the difference between 7.2 and 7.3, there hasn't been too much of a jump between 7.2 and 7.3 in terms of deprecation. There has been new functions such as isCountable when PHP 7.2 introduce the throwing of errors and it's not a countable countable thing. It will throw an error and then some code has problems so it introduce new functions such as isCountable to help you. But in terms of deprecation and support, not much of a big jump as compared to 7.1 to 7.2. 7.1 and 7.2 there might be some rough ages. You might need to change your code here and there to actually work. As for support there has been so I encountered this very interesting issue when I was compiling PHP so Xdebug which everyone heard of Xdebug Xdebug so we all probably heard of Xdebug but we might not have compiled PHP to experience some Xdebug issue. So I was compiling a docker image and apparently Xdebug doesn't work on PHP 7.2 so you need like the beta version 2.7.0 beta slash something-something. So you need to include the specific version in order to install the specific Xdebug because it's in beta so it's not. By default it will install 2.0 2.6 which will fail so because it's incompatible so this is something that you may experience if you are thinking of moving on to 7.3 which I highly recommend you do and this is the support timeline for PHP 7.3 so 7.3 is quite long until standard 2021 and the thing is on a 2-year cycle release so 2-year support so as far as I know from Rasmus Rasmus came down to Singapore last year to talk about 7.3 as well so there were people asking about long term support so far you can see there's no long term support and the PHP core team decided that there will be no LTS releases mainly because it's a small team you know PHP has been has been very very kind and evolving very slowly helping developers to move on slowly already with the deprecations and everything if you look at the change change log and upgrading deprecations wise PHP has been moving very very slowly there has been many inconsistent staff that PHP 5 had there were a lot of heavy baggage from PHP 5 which inconsistent things which many people complain about yes and that's why people say PHP sucks and stuff like that but PHP is trying to move on from the inconsistent stage and trying to evolve away from that and slowly deprecating those old staff away slowly but steadily and hoping that developers adopt all this so you know as developers have a heavy responsibility between PHP 5.6 over to PHP 7 at least hopefully at least PHP 7 and eventually with the developer support from you guys we can evolve a bit faster and move and from what I heard is that there will be JIT JIT support soon maybe in 7.5 7.4 mungkin lebih awal mungkin 7.5 so you all know what is JIT just in time just in time so this JIT thing is very significant because with JIT you can optimise your code to very efficient levels and this would mean that the current PHP machine learning libraries would perform better nowadays JIT learning is like in-thing and hype thing a lot of people use Python and stuff like that but you know I looked at what is that Google thing again which I forgot but anyway they have a Google as this tensorflow so they have the Python version and the javascript version so apparently the Python version is still javascript is exactly the same or maybe even perform faster in certain things than the Python version but still many people use the Python version maybe it's just the ecosystem like when people hear machine learning they will be like yes, Python but little did they know PHP can do it too and you know PHP is intending to improve on that function as well by introducing just in time and all of that so hopefully with just in time coming soon will have improved performance and maybe eventually will get more stuff so if you want to know more details about the PHP 7.2-7.3 I wrote a post about it it's a bit lengthy with some stats interesting stats that you might want to read up on and then like I mean it might be useful it might be useless but I still think it's interesting information I had a lot of fun doing some of the things like testing out the codes and stuff like that reading up on PHP, garbage collector and all of this so it's been a very interesting experience to read up on all of this and of course it's been interesting to speak at a meet-up too so I encourage all of you to speak at a meet-up if you find something interesting you want to talk about it research a bit more come out with it so if you have any suggestions or feedback regarding my talk if it's too boring, too lengthy or you want to hear better content like a specific topic from me you can email me and maybe I can come out with something or you just want to talk to me or discuss something you can always email me if you're too shy so thanks for listening to my talk hope it wasn't too boring do you have any quick questions no too boring so how compatible is this PHP 7.2 sorry how compatible is with oh, so if let's say you run if you run an FPM you definitely not have any issues like I think as long as the Apache itself supports like FPM itself I think running PHP on FPM would be compatible with almost any Apache versions if I remember correctly from memory but of course it's recommended that you have the Apache because you want to get the security fixes and stuff but generally there's no issues as long as you run PHP FPM or otherwise not really too much only when the issue comes only when you're running mod PHP so there will be some issues that you might encounter some ages if you're using certain older versions there are unsupported Apache versions when you run mod PHP so of course if you run FPM there shouldn't be any issues any other questions if not, thanks for listening hope it was enjoyable