CINXE.COM

PHP Programming Innovation Award - PHP Classes

<!DOCTYPE HTML> <html lang=""> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta name="google-site-verification" content="koB0IMWgAHKwEXWyOGt9RPqYrJU-fKzpoOTwRnprhKo" /> <title>PHP Programming Innovation Award - PHP Classes</title> <!-- https://files.phpclasses.org/styles.css --> <style type="text/css"> *, .normal-size { font-size: 14px; } html, body, input[type=submit] { color: black; font-family: "helvetica" , sans-serif , arial , helvetica; overflow-x: hidden !important; } html, body { background-color: #ffffff; height: 100%; margin: 0px; } a:link, a:active { color: #090F15; text-decoration: none; border-bottom-style: dotted; border-bottom-width: 1px; } a:visited { color: #26394d; } a:hover, #logoPHP > a, #logoCompany > a, #topLogoPHP > a { border-bottom-style: none; } .left { float: left; } .right { float: right; } .clear { clear: both; } input[type=text] { border: none; outline: none; color: #333; background: #ffe; z-index: 90; font-size: 1em; font-weight: normal; font-variant: normal; text-transform: none; font-family: monospace; } img { } h1, h1 * { font-size: 28px; width: auto !important; } h2 { color: #19597c; padding-bottom: 0px; padding-top: 0px; } h2, h2 * { font-size: 22px; } h3, h3 * { color: #19597c; font-size: 20px; margin: 10px 0px; padding: 10px 0px; } h4 * { color: #19597c; font-size: 16px; } h5 * { color: #19597c; font-size: 16px; } h6 * { color: #666666; font-size: 14px; } big big a { display: block; font-size: inherit; padding: 0px 0px 10px; } big a { font-size: inherit; } td > a > span, #reputation-button { font-size: 1em; } #reputation-menu { border-radius: 6px !important; } .nbpb, .nbtb { background-color: inherit; border-width: 0px; } .backgroundDecoration { position: absolute; right: 1025px; top: 0px; } #rightDecorationBg { left: 1025px; } #MainContainer { background-color: #19597c; min-height: 100%; margin: 0 auto; } #Container { background: none repeat scroll 0% 0% #fff; height: auto !important; margin: 0px auto; position: relative; z-index: 10; width: 98% !important; } #PageContent { margin: auto; width: 100% !important; position: relative; text-align: left; } #PageInfo, #PageInfoLogged { background: inherit; width: inherit; position: relative; } .pageDecoration { bottom: 0px; position: absolute; right: -9px; } #leftDecoration { left: -9px; } #user-bar:empty { min-height: 56px; } #user { padding-bottom: 4px; } #user, #TopLine, #UserContent, #order-menu { background-color: #19597c; width: 100%; } .shop-step { color: #ffffff; font-size: 18px; line-height: 36px; font-weight: bold; } .responsive-menu { padding-top: 0px; padding-bottom: 0px; } #TopLine, #UserContent { z-index: 1; position: relative; } #TopLine { position: absolute; } #user table { white-space: nowrap; width: auto; margin: 0px auto; padding: 5px 0px 0px 140px; } #user table td { line-height: 30px; padding: 0px; white-space: nowrap; width: auto; } #user .tabcontent, #endnavigation .tabcontent { color: #C3F0FF; font-weight: bold; text-transform: capitalize; } #user .tabcontent span { float: left; padding: 8px 5px 0px 2px; white-space: nowrap; } #user a { color: #FFFFFF; font-size: 14px; font-weight: bold; padding: 0px 5px 0px 2px; text-align: left; text-decoration: none; border-bottom-style: dotted; border-bottom-width: 1px; white-space: nowrap; } #user a:hover { color: #C3F0FF; } #user img { padding-top: 3px; vertical-align: top; } #user .nbgu { float: left; padding: 0px; white-space: nowrap; } #logoPHP { background-size: cover; text-align: center; height: 136px; background: rgb(63,132,41); background: linear-gradient(90deg, rgba(63,132,41,1) 0%, rgba(255,255,255,1) 50%, rgba(25,89,124,1) 100%); } #logoContainer { padding-top: 38px; display: inline-block; } #Top #logoCompany { position: absolute; right: 145px; top: -60px; } #invertedCompanyLogo { text-align: center; } #elephpant { margin-right: 15px; position: absolute; right: 5px; top: -97px; } #recommendpage { margin: auto; width: 40em; } #recommendpage table { min-width: 40em; text-align: center; white-space: normal; border: 2px solid #ccc; border-style: solid; border-radius: 0 0 5px 5px; border-top: 0; margin-bottom: 10px; } #recommendpage table td { background: none repeat scroll 0% 0% transparent; border: medium none; padding: 10px 0px 5px 10px; vertical-align: top; } #recommendpage table td img { padding: 0px 3px 0px 5px; } #navigation { background-color: #4b9759; clear: both; color: #000 !important; font-size: 1.2em; font-weight: bold; height: 44px; line-height: 24px; padding: 0px; position: relative; text-align: center; width: 100%; } #navigation form { border: 0px none; } #navigation table { height: 44px; width: 974px; } #navigation td { font-size: 14px; padding-top: 9px; } #navigation img { border: 0px none; margin: 0px 0px 0px 5px; vertical-align: middle; } #navigation a { color: #ffffff; text-decoration: none; border-bottom-width: 1px; } #navigation a:hover { text-decoration: underline; border-bottom-style: none; } #navigation td.nbgu { display: none; } #navigation td.nbtu, #MenuContent td.nblu { height: 24px; line-height: 24px; padding: 10px 4px 0px; text-decoration: none; border-bottom-width: 1px; } #navigation td.nbtu input[type=text] { height: 20px; margin: 0px 5px; width: 100px; } #navigation td.nbtu * { float: left; } #ads { clear: both; margin: 0px auto; padding: 0px; width: 1010px; } #topAds { display: inline-block; margin-left: 10px; } #inputText { color: #666666; float: left; height: 20px; width: 150px; } .BodyContent { text-align: center; } .BodyColumn { display: inline-block; vertical-align: top; text-align: left; } #BodyContent { display: inline-block; vertical-align: top; text-align: left; } .InfoContent { clear: both; margin: 10px auto 0px auto; max-width: 1025px; position: relative; padding: 0 10px; } .InfoContent .nblu, .InfoContent .nbtu { background-color: #dfdfdf; border-top-left-radius: 2px; border-top-right-radius: 2px; border-width: 1px; color: #19597c; font-size: 12px; padding: 7px; text-align: center; white-space: nowrap; width: auto; } .InfoContent .ct { background-color: #FCFCFC; border-width: 1px 1px 0 1px; border-style: solid; border-color: #E1E1E1; color: #000000; font-size: 12px; padding: 3px; text-align: center; white-space: nowrap; width: auto; } .InfoContent .cd { background-color: #FCFCFC; border-width: 0 1px 1px 1px; border-style: solid; border-color: #E1E1E1; color: #000000; font-size: 12px; padding: 3px; } .InfoContent .cg { margin: 1px; padding: 0px; white-space: nowrap; width: 4px; } .InfoContent .nbtd :hover, .InfoContent .nbtu :hover { background-color: #c9c9c9; text-decoration: underline; border-bottom-style: none; color: #2989C7; } .InfoContent .nbtd :hover .tab, .InfoContent .nbtu :hover .tab { color: #2989C7; } .InfoContent .nbld, .InfoContent .nbtd { background-color: #bfbfbf; border-color: #92DBEC; color: #05497B; font-size: 12px; padding: 7px; text-align: center; white-space: nowrap; width: auto; } .InfoContent .nblu, .InfoContent .nbld { background-color: #557799; color: #FFFFFF; } .InfoContent .nblu .tab { } .InfoContent .nbgu { color: #05497B; margin: 1px; padding: 0px; white-space: nowrap; } .InfoContent .nbgd { color: #05497B; margin: 1px; padding: 0px; white-space: nowrap; } .InfoContent .nbtu a, .InfoContent .nbld a, .InfoContent .nbtd a { color: #05497B; font-size: 12px; } .InfoContent .nbtu span.tab { color: #000000; } .InfoContent .nbtu a.tab { } .InfoContent .nblu a:hover, .InfoContent .nbtu a:hover, .InfoContent .nbld a:hover, .InfoContent .nbtd a:hover { color: #2989C7; } .InfoContent .nblu a, .InfoContent .nbld a { color: #FFFFFF; font-size: 12px; } .InfoContent .nblu a:hover, .InfoContent .nbld a:hover { color: #C3F0FF; } .InfoContent .nbtu, .InfoContent .nbtd { vertical-align: middle; } .InfoContent .nbpu, .InfoContent .nbpd { padding: 6px 0 0 0; } .InfoContent td { padding-left: 5px; } .photo { border-radius: 50%; } .userInfoTable { border: 1px solid #f6f6f6; margin-left: 10px; padding: 20px; } td > b > h2 { margin-bottom: -1px; } .even td, .odd td, .even th, .odd th { color: #444444; } .menutext { border-bottom: 1px dotted #CCCCCC; color: #444444; } .menuicon > a { border-bottom-style: none !important; } .menuicon > a > img { } .menulink a { color: #595959; } .menulink a:hover { text-decoration: underline; border-bottom-style: none; } .back { background-color: #FFFFFF; } .even { background-color: #F9F9F9; } .light { background: none repeat scroll 0% 0% #f2f2f2; } .dark { background: none repeat scroll 0% 0% #d9d9d9; } .c799 > tbody > tr { padding: 10px !important; } .odd { } .even td, .odd td, .highlight td, .highlight th, .highlightContent td, .highlightContent th, .featuredeven td, .featuredodd td { padding: 5px; } .highlight, .highlightContent { background: none repeat scroll 0% 0% #F5F5F5; padding: 5px; } .highlightContent { animation-name: highlightContent; animation-duration: 0.5s; animation-iteration-count: infinite; animation-direction: alternate; } @keyframes highlightContent { 0% { background: #e6d346; } 100% { background: #ffffff; } } .highlightLink { background: none repeat scroll 0% 0% #FDFDFD; padding: 5px; line-height: 30px; animation-name: highlightLink; animation-duration: 0.5s; animation-iteration-count: infinite; animation-direction: alternate; border-radius: 8px; opacity: 90%; color: #000000; } *, .normal-size { } @keyframes highlightLink { 0% { background: #e6d346; } 100% { background: #ffffff; } } .tabcontent { } .nblu .tabcontent { color: #ffffff; } .featuredodd { background-color: #C5D4DB; padding: 5px; } .featuredeven { background-color: #C5D4DB; padding: 5px; } .removed { background-color: #AAAAAA; text-decoration: line-through; } .invalid { background-color: #FFCCCC; } .warning, .shopping-message-warning { background-color: #FFB366; } .alright { background-color: #70F0A0; } .monospace, code { font-family: monospace , Courier , "Courier New"; } .code { white-space: pre; white-space: pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: -moz-pre-wrap; white-space: -hp-pre-wrap; word-wrap: break-word; background: none repeat scroll 0% 0% #FCFCFC; padding: 4px; } .button, .shop-button, .remove-button, .shopping-message, .shopping-message-warning, input[class=shop-input] { border-radius: 6px; padding: 4px; border-width: 1px; border-style: solid; } .shop-button { border-color: #000000; background-color: #ccae66; background-image: linear-gradient(#ffdf92, #ccae66); color: #000000; font-weight: bold; font-size: 14px; padding: 7px; text-align: center; white-space: nowrap; width: auto; } .shop-button:hover, .shop-button:link, .shop-button:active { color: #000000; border-bottom-style: solid; border-bottom-width: 1px; } .shop-button:active { background-image: linear-gradient(#f8d37c, #ffdf92); } .remove-button { border-color: #000000; background-color: #1b95e0; background-image: linear-gradient(#1b95e0, #1470a8); color: #ffffff; font-weight: bold; font-size: 14px; padding: 7px; text-align: center; white-space: nowrap; width: auto; } .remove-button:hover, .remove-button:link, .remove-button:active, input[class=remove-button] { color: #ffffff; border-bottom-style: solid; border-bottom-width: 1px; } .remove-button:active { background-image: linear-gradient(#1470a8, #1b95e0); } .shopping-message-container { text-align: center; } .shopping-message, .shopping-message-warning { display: inline-block; line-height: 28px; border-color: #000000; font-weight: bold; font-size: 14px; padding: 7px; text-align: center; width: auto; } .shopping-message { color: #ffffff; background-color: #666666; background-image: linear-gradient(#666666, #333333); } .shopping-message-warning { color: #000000; background-color: #000000; background-image: linear-gradient(#FFB366, #cc8f52); } .shopping-price { font-size: 16px; text-align: center; font-weight: bold; width: auto; margin-left: 8px; margin-right: 8px; } input[class=shop-input] { margin: 4px; } .new { background-color: #ffea80; background-image: linear-gradient(#fffa80 , #ffea80); text-transform: uppercase; font-size: smaller; border-color: #ffe280; } .edit, .edit :link, .edit :visited, .InfoContent .nbtu a.edit { background-color: #60b040; background-image: linear-gradient(#90c070 , #60b040); color: #ffffff; border-color: #60a840; } .edit :hover, .InfoContent .nbtu a.edit :hover { background-color: #50a030; background-image: linear-gradient(#60b040 , #50a030); color: #C3F0FF; border-color: #60a840; } .edit :active, .InfoContent .nbtu a.edit :active { background-color: #60b040; background-image: linear-gradient(#50a030 , #60b040); color: #ffffff; border-color: #409020; box-shadow: inset 0 2px 4px rgba(0 , 0 , 0 , 0.15); } .tag, .tag :link, .tag :visited { background-color: #dea7a7; background-image: linear-gradient(#eeb3b3 , #dea7a7); color: #994d4d; border-color: #dea7a7; } .tag :hover { background-color: #ce9b9b; background-image: linear-gradient(#dea7a7 , #ce9b9b); color: #793d3d; border-color: #dea7a7; } .tag :active { background-color: #dea7a7; background-image: linear-gradient(#ce9b9b , #dea7a7); color: #994d4d; border-color: #be8f8f; box-shadow: inset 0 2px 4px rgba(0 , 0 , 0 , 0.15); } .ranking, .votes { display: inline; padding: 4px 8px; font-size: large; border-radius: 6px; background-color: #E8E8E8; color: #000000; } .votes { } .progressbar { background-color: #0000FF; background-image: url(https://files.phpclasses.org/graphics/phpclasses//progress.png); background-size: auto 100%; border-style: none; padding: 4px; text-align: center; border-radius: 6px; box-shadow: 4px 4px 4px #888; text-shadow: 2px 2px 2px #55C; } .box { border-color: #E1E1E1; border-style: solid; border-width: 1px; padding: 10px; margin-top: 10px; margin-bottom: 10px; border-radius: 10px; } .framed { margin: 5px 0px; padding: 10px 15px; border-radius: 10px; } .c360 > a { font-size: 13px; display: block; color: #729fcc; } .notifications { background: #e20000; background: radial-gradient(ellipse at center , #e20000 0% , #fb7b67 100%); border-radius: 6px; color: #ffffff; margin: 5px 0px; padding: 4px; text-shadow: 1px 1px 2px rgba(128 , 128 , 128 , 1); } .no-notifications { background: #888888; border-radius: 6px; color: #ffffff; margin: 5px 0px; padding: 4px; text-shadow: 1px 1px 2px rgba(128 , 128 , 128 , 1); } a:hover .no-notifications, a:hover .notifications { text-decoration: underline; border-bottom-style: none; } .score, .highlightScore { background: rgb(243,237,187); background: radial-gradient(circle, rgba(243,237,187,1) 0%, rgba(255,241,133,1) 100%); border-radius: 6px; margin: 5px 0px; padding: 4px; } .scoreText, .score, .highlightScore { color: #404040; text-shadow: 1px 1px 2px rgba(128 , 128 , 128 , 1); } a:hover .score, a:hover .scoreText { text-decoration: underline; border-bottom-style: none; } .highlightScore { animation-name: highlightScore; animation-duration: 0.5s; animation-iteration-count: infinite; animation-direction: alternate; } @keyframes highlightScore { 0% { background: #e6d346; } 100% { background: #ffffff; } } a:hover .highlightScore { text-decoration: underline; border-bottom-style: none; } .menu { border-color: #FCFCFF #707078 #707078 #FCFCFF; border-style: solid; border-width: 1px; cursor: default; opacity: 0.95; padding: 2px; background-color: #c9c9c9; } #Footer { height: 0px; width: 100%; z-index: 1; } #FooterInfo, #FooterInfoLogged { background: #19597c; min-height: 80px; position: relative; width: 100%; padding: 10px; margin-top: 10px; top: 10px; } #endnavigation { height: 35px; padding: 0px; width: 100%; } #endnavigation * { margin: 0px; padding: 0px; } #endnavigation table { height: 35px; padding: 0px; } #endnavigation table tbody { vertical-align: top; } #endnavigation a { color: #FFFFFF; font-weight: bold; padding: 0px 0px 0px 0px; text-decoration: none; border-bottom-style: dotted; border-bottom-width: 1px; text-transform: capitalize; } #endnavigation a:hover { text-decoration: underline; border-bottom-style: none; } #endnavigation img { padding-left: 13px; } #Copyright { width: 95% !important; color: #FFFFFF; height: 20px; margin: 0px auto; padding: 10px 0px; text-align: left; overflow: hidden !important; text-align: center; font-weight: bold; } #Copyright a { color: #86d5f2; text-decoration: none; border-bottom-style: dotted; border-bottom-width: 1px; } #Copyright a:hover { text-decoration: underline; border-bottom-style: none; } #Copyright table td { color: #FFFFFF; padding: 0px; } #Top, #TopLogged { background: none repeat scroll 0% 0% #FFFFFF; margin: 0px auto; padding: 0px; width: 100%; position: relative; bottom: 0px; top: 0px; } #Top h1, #TopLogged h1 { max-width: 1025px; margin: 15px auto 15px auto; overflow: hidden; color: #7F8C8D; } #Top h1 { position: relative; } #Top #topLogoPHP, #TopLogged #topLogoPHP, #TopLogo #topLogoPHP { max-width: 1025px; margin-left: auto; margin-right: auto; overflow: hidden; padding: 0 0 0 10px; color: #7F8C8D; position: relative; height: 60px; top: -60px; bottom: -60px; } #Top #topLogoPHP #topLogoPHPContainer, #TopLogged #topLogoPHP #topLogoPHPContainer, #TopLogo #topLogoPHP #topLogoPHPContainer { background-color: #ffffff; width: 200px; text-align: center; padding: 10px; position: relative; z-index: 2; } #TopLogo { margin-bottom: -60px; } #Top #subtitle, #TopLogged #subtitle { max-width: 1025px; margin: auto; overflow: hidden; } #Top #subtitle { position: relative; } .search-input { vertical-align: top; margin: 1px 0 0 0; display: inline-block; } #Contact, #Contact a { color: #ffffff; font-weight: bold; } .window-active-bar { border-style: none; background-color: #4b9759; height: 1%; white-space: nowrap; color: #ffffff; font-weight: bold; } .window-inactive-bar { border-style: none; background-color: #808080; height: 1%; white-space: nowrap; color: #c0c0c0; font-weight: bold; } .window { background-color: #f9f9f9; border-width: 1px; border-style: solid; border-top-color: #ffffff; border-left-color: #ffffff; border-bottom-color: #808080; border-right-color: #808080; } .nblu input { font-weight: bold; } .contactBar { position: fixed; bottom: 0px; right: 32px; z-index: 16777271; } </style> <!-- https://files.phpclasses.org/responsive.css --> <style type="text/css"> .safe-padding { padding: 14px; line-height: 200%; } .safe-size { font-size: 110%; } .call { display: none; } @media (max-width: 1024px) { .c1025 { display: none; } h1, h1 * { font-size: 20px; } h2, h2 * { font-size: 18px; } h3, h3 * { font-size: 16px; } h4 * { font-size: 14px; } h5 * { font-size: 12px; } h6 * { font-size: 10px; } #Top h1, #Top subtitle { padding: 10px 0 0 10px; margin: 0 0 0 0; } .InfoContent { margin: 0 auto 0 auto; padding: 0; } .responsive-menu { padding-top: 14px; padding-bottom: 12px; } .responsive-order-menu { padding-top: 0px; padding-bottom: 0x; } #BodyContent { display: block; } #PageContent { margin: 0; padding: 0; } } @media (min-width: 1025px) { .u1025 { display: none; } } @media (max-width: 1025px) { .contactBar { bottom: 0px; right: 10px; z-index: 16777271; } } @media (max-width: 399px) { .c399 { display: none; } } @media (max-width: 499px) { .c499 { display: none; } #Top h1 { width: auto; } } @media (max-width: 799px) { .c799 { display: none; } } @media (min-width: 799px) { .u799 { display: none; } } @media (max-width: 640px) { .c640 { display: none; } } @media (max-width: 360px) { .c360 { display: none; } } .menu-items { position: absolute; z-index: 1001; background-color: #103754; border-color: #cccccc; border-style: solid; border-width: 1px; padding: 4px; top: 32px; line-height: 36px; } .menu-items a { color: #C3F0FF; font-weight: bold; text-decoration: none; } #navigation-menu, #user-menu, #order-menu { display: inline-block; padding: 2px 4px 0px 4px; vertical-align: middle; text-align: left; position: relative; } #navigation-menu .menu-items, #user-menu .menu-items, #order-menu .menu-items { display: none; } #navigation-button:checked + .menu-items, #user-button:checked + .menu-items, #order-button:checked + .menu-items { display: inline-block; vertical-align: middle; white-space: nowrap; } #navigation-label, #user-label, #order-label { z-index: 1001; display: inline-block; vertical-align: middle; } #navigation-label img, #user-label img, #order-label img { pointer-events: none; } #navigation-menu input[type="checkbox"], #user-menu input[type="checkbox"], #order-menu input[type="checkbox"] { display: none; } </style> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="https://files.phpclasses.org/graphics/phpclasses/favicon.ico"> <link rel="alternate" href="/browse/latest/latest.xml" type="application/rss+xml" title="Latest published classes"> <link rel="alternate" href="/reviews/latest/latest.xml" type="application/rss+xml" title="Latest published book reviews"> <link rel="canonical" href="https://www.phpclasses.org/award/innovation/"> <link rel="preconnect" href="https://files.phpclasses.org/"> <link rel="preconnect" href="https://token.rubiconproject.com"> <link rel="preconnect" href="https://clevernt.com"> <link rel="preconnect" href="https://pagead2.googlesyndication.com"> <link rel="preconnect" href="https://www.google.com"> <link rel="preconnect" href="https://www.gstatic.com"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://srv.buysellads.com"> <meta property="fb:pages" content="114418241923267"> <!-- https://files.phpclasses.org/js/contentLoader.js --> <script type="text/javascript"> //<![CDATA[ /* * contentLoader.js * * Get the latest version from: * * http://www.jsclasses.org/fast-content-loader * * @(#) $Id: contentLoader.js,v 1.17 2021/08/12 10:57:05 mlemos Exp $ * * * This LICENSE is in the BSD license style. * * * Copyright (c) 2010, Manuel Lemos * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Manuel Lemos nor the names of his contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Portions of the code that implement document write capture are based * on the Bezen library by Eric Brechemier licensed under the Creative * Commons Attribution license 3.0: * * http://creativecommons.org/licenses/by/3.0/ * * http://bezen.org/javascript/ * * Portions of the code that implement JavaScript lazy loading are based * on the Flying scripts by Gijo Varghese: * * https://wordpress.org/plugins/flying-scripts/ */ /*jslint browser: true, devel: true, long: true, single: true, white: true, this: true, for: true */ var ML; if(ML === undefined) { ML = {}; } if(ML.content === undefined) { ML.content = {}; } ML.content.contentLoader = function() { var doNotRemoveThisGetTheLatestVersionFrom = 'https://www.jsclasses.org/fast-content-loader'; var content = []; var update = null; var outputDebug = function(o, message) { if(o.debug) { if(console && console.log) { console.log(message); } else { alert(message); } } return false; }; var replaceContent = function(o) { var remaining = 0; var c; var delayed; var place; var replace; var events; for(c in content) { if(content.hasOwnProperty(c)) { if(!content[c].loaded) { delayed = document.getElementById(content[c].delayed); place = document.getElementById(content[c].id); if(delayed && place) { delayed.parentNode.removeChild(delayed); place.parentNode.replaceChild(delayed, place); delayed.style.display = (content[c].inline ? ((content[c].width || content[c].height) ? 'inline-block' : 'inline') : 'block'); content[c].loaded = true; } else { remaining = remaining + 1; } } } } if(remaining === 0) { window.clearInterval(update); update = null; events = [ 'keydown', 'mouseover', 'touchmove', 'touchstart' ]; replace = function() { document.querySelectorAll("script[data-loading='lazy']").forEach(function(element) { var source; source = element.getAttribute('data-src'); element.removeAttribute('data-src'); element.removeAttribute('data-loading'); element.setAttribute('src', source); } ); window.clearTimeout(update); update = null; events.forEach(function(event) { window.removeEventListener(event, replace, { passive: true }); } ); }; update = window.setTimeout(replace, o.lazyDelay); events.forEach(function(event) { window.addEventListener(event, replace, { passive: true }); } ); } return remaining; }; this.debug = false; this.defaultInline = false; this.updateInterval = 10; this.contentPrefix = 'con'; this.delayedPrefix = 'del'; this.delayedContent = '&nbsp;'; this.lazyDelay = 5000; this.addContent = function(properties) { var i; var m; if(!properties.content) { return outputDebug(this, 'Content properties are missing'); } properties.id = this.contentPrefix + content.length; properties.delayed = this.delayedPrefix + content.length; if(properties.inline === undefined) { properties.inline = this.defaultInline; } properties.loaded = false; if(typeof properties.priority !== 'number') { properties.priority = 0; } document.write('<div id="' + properties.id + '" style="' + (properties.width ? 'width: ' + properties.width + 'px;' : '') + (properties.height ? ' height: ' + properties.height + 'px;' : '') + ' overflow: none; display: ' + (properties.inline ? ((properties.width || properties.height) ? 'inline-block' : 'inline') : 'block') + '">' + this.delayedContent + '</div>'); for(i = content.length; i > 0 && content[i - 1].priority < properties.priority; i = i - 1) { } for(m = content.length; m > i; m = m - 1) { content[m] = content[m - 1]; } content[i] = properties; return true; }; this.loadContent = function() { var o = this; var written; var write; var writeln; var reportError; var catchError; var trim; var hasAttribute; var moveScript; var moveScriptClone; var moveNodes; var insertWritten; var load; var c; if(window.opera || navigator.userAgent.indexOf('MSIE') !== -1) { written = []; write = function(html) { written.push(html); }; writeln = function(html) { write(html + "\n"); }; reportError = function(error, url, line) { if(typeof error === 'object') { reportError(error.message, error.fileName, error.lineNumber); return; } outputDebug(o, error + ' at ' + url + '[' + line + ']'); }; catchError = function(func, description) { var f; description = description || 'error.catchError'; if(typeof func !== 'function') { reportError(description + ': A function is expected, found ' + typeof func); f = function() { }; return f; } f = function() { try { return func.apply(this, []); } catch(e) { if(window.onerror) { window.onerror(description + ': ' + e.message + ' in ' + func, e.fileName, e.lineNumber, true); } } }; return f; }; trim = function(text) { return(text.replace(/^\s*/, '').replace(/\s*$/, '')); }; hasAttribute = function(node, attribute) { var attributeNode; if(node.hasAttribute) { return node.hasAttribute(attribute); } attributeNode = node.getAttributeNode(attribute); if(attributeNode === null) { return false; } return attributeNode.specified; }; moveScript = function(script, target, callback) { var safeCallback = catchError(callback, 'script.onload'); if(script.readyState && script.onload !== null) { script.onreadystatechange = function() { if(script.readyState === 'loaded' || script.readyState === 'complete') { script.onreadystatechange = null; script.onerror = null; safeCallback(); } }; } else { script.onload = safeCallback; } target.appendChild(script); }; moveScriptClone = function(script, target, callback) { var externalScript; var internalScript; var i; var attribute; var code; if(hasAttribute(script, 'src')) { externalScript = document.createElement('script'); for(i = 0; i < script.attributes.length; i = i + 1) { attribute = script.attributes[i]; if(hasAttribute(script, attribute.name)) { externalScript.setAttribute(attribute.name, attribute.value); } } externalScript.text = script.text; moveScript(externalScript, target, callback); } else { internalScript = script.cloneNode(false); internalScript.text = script.text; internalScript.type = 'any'; target.appendChild(internalScript); if(hasAttribute(script, 'type')) { internalScript.setAttribute('type', script.type); } else { internalScript.removeAttribute('type'); } code = trim(internalScript.text); if(code.indexOf('<!--') === 0) { code = code.substr(4); if(code.substr(code.length - 3) === '-->') { code = code.substr(0, code.length - 3); } } (new Function(code))(); callback(); } }; moveNodes = function(source, target, callback) { var nextSource; var nextTarget; var nextStep; var clone; var scriptCount; var sourceAncestor; if(source === null) { callback(); return; } nextSource = null; nextTarget = target; nextStep = function() { moveNodes(nextSource, nextTarget, callback); }; if(source.nodeName === 'SCRIPT' && (!source.language || source.language.toLowerCase() === 'javascript') && (!source.type || trim(source.type).toLowerCase() === 'text/javascript')) { setTimeout(function() { moveScriptClone(source, target, function() { insertWritten(target, nextStep); }); }, 0); } else { clone = source.cloneNode(false); target.appendChild(clone); setTimeout(nextStep, 0); if(source.firstChild) { scriptCount = source.getElementsByTagName('script').length; if(scriptCount === 0) { if(source.nodeName === 'TABLE') { clone.outerHTML = source.outerHTML; } else { clone.innerHTML = source.innerHTML; } } else { nextSource = source.firstChild; nextTarget = clone; } } } if(nextSource === null) { nextSource = source.nextSibling; } sourceAncestor = source.parentNode; while(nextSource === null && sourceAncestor !== null) { nextSource = sourceAncestor.nextSibling; nextTarget = nextTarget.parentNode; sourceAncestor = sourceAncestor.parentNode; } }; insertWritten = function(target, callback) { var div; if(written.length > 0) { div = document.createElement('div'); div.innerHTML = '<br>' + written.join(''); written = []; div.removeChild(div.firstChild); moveNodes(div.firstChild, target, callback); } else { callback(); } }; load = function() { var documentWrite = document.write; var documentWriteln = document.writeln; var loadContentElement; document.write = write; document.writeln = writeln; loadContentElement = function (c) { var div = document.getElementById(content[c].id); div.innerHTML = ''; write(content[c].content); insertWritten(div, function () { content[c].loaded = true; c = c + 1; if(c < content.length) { loadContentElement(c); } else { document.writeln = documentWriteln; document.write = documentWrite; } }); }; loadContentElement(0); }; if(content.length) { if(window.addEventListener) { window.addEventListener('load', load, false); } else { if(window.attachEvent) { window.attachEvent('onload', load); } else { if(document.addEventListener) { document.addEventListener('load', load, false); } else { document.attachEvent('onload', load); } } } } } else { for(c in content) { if(content.hasOwnProperty(c)) { if(!content[c].loaded) { document.write('<div id="' + content[c].delayed + '" style="' + (content[c].width ? 'width: ' + content[c].width + 'px;' : '') + (content[c].height ? ' height: ' + content[c].height + 'px;' : '') + ' overflow: none; display: none">' + content[c].content + '</div>'); } } } if(replaceContent(o) && update === null) { update = window.setInterval(function() { replaceContent(o); }, this.updateInterval); } } }; }; //]]> </script> <script type="text/javascript"><!-- var cl = new ML.content.contentLoader(); var cookies = document.cookie.split(";"), expires = new Date(); for(var c = 0; c < cookies.length; ++c) { var m = cookies[c].match(/^ +([^=]+)/); if(m && m[1] === "visit") break; } if(c === cookies.length) { expires.setTime(expires.getTime()+(24*60*60*1000)); document.cookie = "visit=" + (new Date()).getTime() + "; expires=" + expires.toGMTString() + "; path=/;"; } // --></script> <style type="text/css"> .award-section { max-width: 40em; float: left } .award-details { max-width: 64em; margin: auto; } .clear-margins { clear: both; f} </style> <script><!-- if (top != window) { top.location = window.location; } // --></script> </head> <body> <div id="fb-root"></div> <!-- Start AdSense page level ads --> <script async data-src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2951707118576741" crossorigin="anonymous" data-loading="lazy"></script> <!-- End AdSense page level ads --> <!-- Start of Sticky BuySellAds --> <script async data-src="//m.servedby-buysellads.com/monetization.js" data-loading="lazy"></script> <script> window.addEventListener("load", (event) => { (function () { if (typeof _bsa !== "undefined" && _bsa) { _bsa.init("stickybox", "CK7DPK3E", "placement:phpclassesorg"); } })(); }); </script> <!-- End of Sticky BuySellAds --> <div id="MainContainer"> <div id="TopLine"></div> <div id="Container"> <div id="UserContent"> <div class="c1025" id="user-bar"></div> <div class="u1025 responsive-menu"><a href="/"><img src="https://files.phpclasses.org/graphics/phpclasses/logo-small-phpclasses.svg" width="75" height="24" loading="lazy" alt="logo small" style="vertical-align: top"></a></div> </div> <div id="logoPHP" class="c1025"> <div id="logoContainer"><a href="/"><img src="https://files.phpclasses.org/graphics/phpclasses/logo-phpclasses.png" width="180" height="60" loading="lazy" alt="PHP Classes" style="border: 0"></a></div> <div id="topAds"></div> </div> <div id="PageContent"> <div id="Top"> <h1>PHP Programming Innovation Award</h1> <div id="subtitle"></div> </div> <div id="PageInfo"> <div class="c1025"></div> <div class="c1025"></div> <div> <div class="InfoContent"></div> <div id="ads"></div> <div class="BodyContent"> <div class="BodyColumn"></div> <div id="BodyContent" class="InfoContent"><!-- body_start --><div class="award-details"><h2><a href="#what-is-it">What is the PHP Programming Innovation Award?</a></h2> <h2><a href="#how-it-works">How does the award work?</a></h2> <h2><a href="#sponsors-and-prizes">Sponsors and prizes</a></h2> <h2><a href="#rules">Rules</a></h2> <h2><a href="/vote.html">Current nominees and voting</a></h2> <h2><a href="/winners/">Winners</a></h2> <br /> <div class="c799 framed dark" style="float: right; margin: 4px; background-color: #FFFFFF"><div style="text-align: center"><h2>Sponsors</h2> <a target="_blank" href="http://www.ip2location.com/"><img src="https://files.phpclasses.org/graphics/ip2location-logo.gif" width="160" height="60" alt="IP2Location" title="IP2Location - Producers of databases to find IP address world locations" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="http://www.ioncube.com/"><img src="https://files.phpclasses.org/graphics/ioncube-logo.gif" width="180" height="60" alt="IonCube" title="IonCube - PHP script encoder developers" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="https://www.phpclasses.org/"><img src="https://files.phpclasses.org/graphics/phpclasses/logo-phpclasses.png" width="180" height="60" alt="PHPClasses" title="PHPClasses - PHP Classes Repository" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="https://mailtrap.io/"><img src="https://files.phpclasses.org/graphics/mailtrap-logo.png" width="160" height="40" alt="Mailtrap" title="Mailtrap - Solutions for testing email deliveries from application pre-production environments" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="https://nomadphp.com/"><img src="https://files.phpclasses.org/graphics/nomadphp-logo.png" width="60" height="60" alt="Nomad PHP" title="Nomad PHP - Learn advanced PHP programming with live conferences, meetings and workshops" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="http://www.sourceguardian.com/"><img src="https://files.phpclasses.org/graphics/sourceguardian-logo.gif" width="160" height="60" alt="SourceGuardian" title="SourceGuardian - Producer of PHP code encoder tool" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="http://www.codelobster.com/"><img src="https://files.phpclasses.org/graphics/codelobster-logo.gif" width="130" height="60" alt="CodeLobster Software" title="CodeLobster Software - PHP IDE developers" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="http://apilayer.net/"><img src="https://files.phpclasses.org/graphics/apilayer-logo.gif" width="160" height="60" alt="APILayer" title="APILayer - Provider of dedicated APIs" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="https://ibanapi.com/"><img src="https://files.phpclasses.org/graphics/ibanapi-logo.png" width="160" height="48" alt="IBANAPI" title="IBANAPI - The IBAN Validation API service" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="https://www.phpdefend.com/"><img src="https://files.phpclasses.org/graphics/php-defender-logo.jpg" width="57" height="60" alt="PHP Defender" title="PHP Defender - Tools for the protection of PHP based intellectual property" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="http://www.oreilly.com/"><img src="https://files.phpclasses.org/graphics/oreilly-logo.gif" width="160" height="42" alt="O'Reilly" title="O'Reilly - Book publisher" align="middle" border="0"></a><br /> <br /> <a target="_blank" href="http://www.phparch.com/"><img src="https://files.phpclasses.org/graphics/phparchitect-logo.gif" width="160" height="60" alt="PHP Architect" title="PHP Architect - PHP magazine publisher" align="middle" border="0"></a><br /> <br /> <h2>Award logo by <a target="_blank" href="https://www.elroubio.net/"><img src="https://files.phpclasses.org/graphics/phpclasses/elroubio-logo.gif" width="65" height="59" alt="Vincent Pontier - El Roubio" title="Award logo by Vincent Pontier - El Roubio" align="middle" border="0"></a></h2> </div> <div style="clear: both"></div> </div> <div class="award-section"><h2><img src="/award/innovation/logo.png" alt="What is the PHP Programming Innovation Award?" title="Award logo by Vincent Pontier - El Roubio" align="right" border="0" style="padding: 4px"><a name="what-is-it">What is the PHP Programming Innovation Award?</a></h2> <p class="framed light">The PHP Programming Innovation Award goal is to provide recognition to developers who make outstanding contributions to the PHP community.<br /> <br /> The award aims to honor developers who share components in the form of PHP classes of objects that provide innovative features or solve problems with approaches that provide additional value to the PHP applications of other developers.<br /> <br /> The main goal of this award is to encourage developers to contribute PHP components that provide innovative features, instead of just replicating the features already provided by previously contributed components.<br /> <br /> At the same time it is expected or hoped that the recognition and prizes, which can be earned by award nominees and winners, will motivate more capable developers, who otherwise would not participate, to make contributions.<br /> <br /> The PHP community has grown naturally without a marketing force persuading developers to adopt it, unlike other languages that are backed by big companies with large budgets to invest in huge marketing campaigns.<br /> <br /> This award also has an implicit goal to inspire other sites or companies to promote PHP and its community by the means of other initiatives, hopefully different from this one, that focus on motivating and providing recognition to individuals or groups who make outstanding contributions to the PHP community and foster the continuation of its growth.<br /> <br /> Cooperating is better than competing. Cooperate and the community will embrace you.</p> <h2><a name="how-it-works">How does the award work?</a></h2> <p class="framed light">Every month all newly published classes that were considered innovative by the PHP Classes site are nominated as candidates for the award.<br /> <br /> In the following month, the nominees will be announced. Then, subscribers to the site may vote on which of the nominated classes they considered to be the most innovative. At the beginning of the next month, the winners will be announced as well the new nominees.<br /> <br /> The winning author will be entitled to receive one prize provided by sponsor of choice. The remaining nominees may also be entitled to receive one prize, depending on their award rank and the availability of prizes.<br /> <br /> Authors awarded with prizes may choose which of the prizes they would like to receive, with authors choosing in descending order of votes received. One author may only receive a prize once per month, even if more than one of his/her class qualified to win prizes.</p> <h2><a name="sponsors-and-prizes">Sponsors and prizes</a></h2> <p class="framed light">The sponsors are responsible for delivering the prizes directly to the winning authors, except in the case when the author lives in a country to which the sponsor that provides the chosen prize may not export due to local legislation. In that case, the prize will be sent to the PHP Classes site that will ship the prize to the author later.<br /> <br /> The current list of sponsors follows. Other sponsors may join later.</p> <center><table class="framed light" style="background-color: #FFFFFF"> <tr> <td><table> <tr> <th>Sponsors</th> <th colspan="2">Prizes</th> </tr> <tr> <td style="text-align: center"><a target="_blank" href="http://www.ip2location.com/"><img src="https://files.phpclasses.org/graphics/ip2location-logo.gif" width="160" height="60" alt="IP2Location" title="IP2Location - Producers of databases to find IP address world locations" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="http://www.ip2location.com/databases/db15-ip-country">One year server license IP to country, region, city, latitude, longitude, ZIP code, time zone, area code database</a></td><td style="text-align: center" class="c499"><a target="_blank" href="http://www.ip2location.com/databases/db15-ip-country"><img src="https://files.phpclasses.org/graphics/ip2location-award-prize.gif" width="120" height="60" alt="One year server license IP to country, region, city, latitude, longitude, ZIP code, time zone, area code database" title="One year server license IP to country, region, city, latitude, longitude, ZIP code, time zone, area code database" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="http://www.ioncube.com/"><img src="https://files.phpclasses.org/graphics/ioncube-logo.gif" width="180" height="60" alt="IonCube" title="IonCube - PHP script encoder developers" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="https://ioncube24.com/">One year of ionCube24 Web site security protection</a></td><td style="text-align: center" class="c499"><a target="_blank" href="https://ioncube24.com/"><img src="https://files.phpclasses.org/graphics/ioncube-award-prize.gif" width="118" height="60" alt="One year of ionCube24 Web site security protection" title="One year of ionCube24 Web site security protection" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="https://www.phpclasses.org/"><img src="https://files.phpclasses.org/graphics/phpclasses/logo-phpclasses.png" width="180" height="60" alt="PHPClasses" title="PHPClasses - PHP Classes Repository" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="https://www.phpclasses.org/award/innovation/#sponsors-and-prizes">One official elePHPant Plush Mascott</a></td><td style="text-align: center" class="c499"><a target="_blank" href="https://www.phpclasses.org/award/innovation/#sponsors-and-prizes"><img src="https://files.phpclasses.org/graphics/phpclasses/prize-phpclasses.jpg" width="80" height="60" alt="One official elePHPant Plush Mascott" title="One official elePHPant Plush Mascott" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="https://mailtrap.io/"><img src="https://files.phpclasses.org/graphics/mailtrap-logo.png" width="160" height="40" alt="Mailtrap" title="Mailtrap - Solutions for testing email deliveries from application pre-production environments" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="https://mailtrap.io/">1 year of Team Plan of Mailtrap</a></td><td style="text-align: center" class="c499"><a target="_blank" href="https://mailtrap.io/"><img src="https://files.phpclasses.org/graphics/mailtrap-prize.png" width="160" height="40" alt="1 year of Team Plan of Mailtrap" title="1 year of Team Plan of Mailtrap" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="https://nomadphp.com/"><img src="https://files.phpclasses.org/graphics/nomadphp-logo.png" width="60" height="60" alt="Nomad PHP" title="Nomad PHP - Learn advanced PHP programming with live conferences, meetings and workshops" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="https://nomadphp.com/">1 Year Subscription to NomadPHP Advanced PHP Learning</a></td><td style="text-align: center" class="c499"><a target="_blank" href="https://nomadphp.com/"><img src="https://files.phpclasses.org/graphics/nomadphp-prize-logo.png" width="60" height="60" alt="1 Year Subscription to NomadPHP Advanced PHP Learning" title="1 Year Subscription to NomadPHP Advanced PHP Learning" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="http://www.sourceguardian.com/"><img src="https://files.phpclasses.org/graphics/sourceguardian-logo.gif" width="160" height="60" alt="SourceGuardian" title="SourceGuardian - Producer of PHP code encoder tool" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="http://www.sourceguardian.com/php_encoder.html">SourceGuarding PHP encoder tool</a></td><td style="text-align: center" class="c499"><a target="_blank" href="http://www.sourceguardian.com/php_encoder.html"><img src="https://files.phpclasses.org/graphics/sourceguardian-award-prize.gif" width="120" height="60" alt="SourceGuarding PHP encoder tool" title="SourceGuarding PHP encoder tool" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="http://www.codelobster.com/"><img src="https://files.phpclasses.org/graphics/codelobster-logo.gif" width="130" height="60" alt="CodeLobster Software" title="CodeLobster Software - PHP IDE developers" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="http://www.codelobster.com/order.html">One downloadable copy of CodeLobster Professional</a></td><td style="text-align: center" class="c499"><a target="_blank" href="http://www.codelobster.com/order.html"><img src="https://files.phpclasses.org/graphics/codelobster-award-prize.gif" width="52" height="60" alt="One downloadable copy of CodeLobster Professional" title="One downloadable copy of CodeLobster Professional" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="http://apilayer.net/"><img src="https://files.phpclasses.org/graphics/apilayer-logo.gif" width="160" height="60" alt="APILayer" title="APILayer - Provider of dedicated APIs" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="http://apilayer.net/#products">1 year subscription to the Basic Plan of an API product of choice</a></td><td style="text-align: center" class="c499"><a target="_blank" href="http://apilayer.net/#products"><img src="https://files.phpclasses.org/graphics/apilayer-award-prize.gif" width="120" height="60" alt="1 year subscription to the Basic Plan of an API product of choice" title="1 year subscription to the Basic Plan of an API product of choice" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="https://ibanapi.com/"><img src="https://files.phpclasses.org/graphics/ibanapi-logo.png" width="160" height="48" alt="IBANAPI" title="IBANAPI - The IBAN Validation API service" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="https://ibanapi.com/">Premium IBAN Validation API service Enterprise Edition for 1 Year</a></td><td style="text-align: center" class="c499"><a target="_blank" href="https://ibanapi.com/"><img src="https://files.phpclasses.org/graphics/ibanapi-award-prize.png" width="160" height="48" alt="Premium IBAN Validation API service Enterprise Edition for 1 Year" title="Premium IBAN Validation API service Enterprise Edition for 1 Year" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="https://www.phpdefend.com/"><img src="https://files.phpclasses.org/graphics/php-defender-logo.jpg" width="57" height="60" alt="PHP Defender" title="PHP Defender - Tools for the protection of PHP based intellectual property" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="https://www.phpdefend.com/">PHP encoder tool one year license</a></td><td style="text-align: center" class="c499"><a target="_blank" href="https://www.phpdefend.com/"><img src="https://files.phpclasses.org/graphics/php-defender-prize.jpg" width="57" height="60" alt="PHP encoder tool one year license" title="PHP encoder tool one year license" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="http://www.oreilly.com/"><img src="https://files.phpclasses.org/graphics/oreilly-logo.gif" width="160" height="42" alt="O'Reilly" title="O'Reilly - Book publisher" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="http://www.oreilly.com/">30 Days Free Access to O'Reilly Safari Learning Platform</a></td><td style="text-align: center" class="c499"><a target="_blank" href="http://www.oreilly.com/"><img src="https://files.phpclasses.org/graphics/oreilly-award-prize.gif" width="33" height="55" alt="30 Days Free Access to O'Reilly Safari Learning Platform" title="30 Days Free Access to O'Reilly Safari Learning Platform" align="middle" border="0"></a></td></tr> <tr> <td style="text-align: center"><a target="_blank" href="http://www.phparch.com/"><img src="https://files.phpclasses.org/graphics/phparchitect-logo.gif" width="160" height="60" alt="PHP Architect" title="PHP Architect - PHP magazine publisher" align="middle" border="0"></a></td> <td style="text-align: center"><a target="_blank" href="http://www.phparch.com/">One subscription to the PDF edition of the PHP Architect magazine</a></td><td style="text-align: center" class="c499"><a target="_blank" href="http://www.phparch.com/"><img src="https://files.phpclasses.org/graphics/phparchitect-award-prize.gif" width="120" height="60" alt="One subscription to the PDF edition of the PHP Architect magazine" title="One subscription to the PDF edition of the PHP Architect magazine" align="middle" border="0"></a></td></tr> </table></td> </tr> </table></center> <h2><a name="rules">Rules</a></h2> <p class="framed light">Every class submitted and approved for publishing on the PHP Classes site, automatically qualifies as a potential nominee to compete for winning the award for the month of publication.<br /> <br /> Qualifying classes have to be submitted by their original authors. The classes do not have to be absolutely original as long as they provide innovative features compared with the other classes already published on the PHP Classes site. The classes may also have been previously published on other sites, even if those sites are code repositories similar to the PHP Classes site.<br /> <br /> At the beginning of each month, the PHP Classes site will nominate the classes published in the previous month that were considered the most innovative. Starting then, and until the end of the month, subscribers to the site will be able to vote on one of the nominated classes. The class with the most votes will be the winner.<br /> <br /> Authors may vote for their own classes but they may not create new accounts on the site for the purpose of increasing the number of votes for their classes. That is considered to be fraud. The site has means to detect fraud. Any attempt to commit voting fraud leads to automatic disqualification without warning.<br /> <br /> Winners will be listed in the pages of the PHP Classes site for this award. They will also be notified by e-mail. After notification they have 7 days in which to claim their prizes. If that period passes it is assumed that the author is not interested in the prizes, and the next nominated author will be notified to select his or her prize. The PHP Classes site will not reconsider even if there were mail delivery problems that prevented a winning author receiving prize notifications messages.</p> <div style="clear: both"></div></div> </div> <div class="clear-margins"></div><!-- body_end --><script type="text/javascript"><!-- cl.addContent({ content: '\n\x3c!-- Start of Google Analytics 4 --\x3e\n\x3c!-- Google tag (gtag.js) --\x3e\n\x3cscript async src="https:\x2f\x2fwww.googletagmanager.com\x2fgtag\x2fjs?id=G-BN2GRQ7TJL"\x3e\x3c\x2fscript\x3e\n\x3cscript\x3e\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag(\'js\', new Date());\n\n gtag(\'config\', \'G-BN2GRQ7TJL\');\n\x3c\x2fscript\x3e\n\x3c!-- End of Google Analytics 4 --\x3e\n\n', inline: false }); // --></script> </div> <div class="BodyColumn"></div> </div> </div> </div> <div id="FooterInfo"> <div class="c1025"></div> <div id="invertedCompanyLogo"><a href="https://www.icontem.com/" target="_blank" rel="noreferrer nofollow noopener noreferer"><img src="https://files.phpclasses.org/graphics/inverted-icontem.png" width="180" height="60" loading="lazy" alt="Icontem" style="border: 0"></a></div> <div id="Copyright">Copyright (c) <a href="https://www.icontem.com/" rel="noreferrer nofollow noopener noreferer" target="_blank">Icontem</a> 1999-2024</div> <div id="Contact"><address>For more information send a message to <code><a target="_blank" href="/faq/#contact">info at phpclasses dot org</a></code>.</address> <div class="contactBar"><div style="background-color: #25d366; border-radius: 8px; padding: 7px 3px 4px 6px; margin: 4px; border-width: 1px; border-color: #000000; border-style: solid; width: 37px"><a target="_blank" href="https://api.whatsapp.com/send?phone=5514998068719&text=Hello%2C+I+visited+your+site++and+I+need+your+help." title="Contact us using WhatsApp"><?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) based on the original provided with permission by WhatsApp (https://www.facebook.com/brand/resources/whatsapp/whatsapp-brand) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="svg2" xml:space="preserve" width="32.950111" height="32.641735" viewBox="0 0 32.950112 32.641736" sodipodi:docname="WhatsApp_Logo_2.svg" inkscape:version="0.92.2 5c3e80d, 2017-08-06"><metadata id="metadata8"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs6"><clipPath clipPathUnits="userSpaceOnUse" id="clipPath18"><path d="M 0,1066.861 H 1280.244 V 0 H 0 Z" id="path16" inkscape:connector-curvature="0" /></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="clipPath30"><path d="M 0,1066.861 H 1280.244 V 0 H 0 Z" id="path28" inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="993" id="namedview4" showgrid="false" inkscape:zoom="1" inkscape:cx="-265.30262" inkscape:cy="-256.21845" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="g10" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" /><g id="g10" inkscape:groupmode="layer" inkscape:label="WhatsApp_Logo_2" transform="matrix(1.3333333,0,0,-1.3333333,-830.48251,714.48498)"><g id="g12" transform="matrix(0.01930303,0,0,0.02294704,622.8619,511.38245)"><g id="g14" clip-path="url(#clipPath18)"><g id="g20" transform="translate(1260.3838)"><path d="m 0,0 h -1240.524 c -10.968,0 -19.86,8.892 -19.86,19.86 v 1027.142 c 0,10.968 8.892,19.859 19.86,19.859 H 0 c 10.968,0 19.86,-8.891 19.86,-19.859 V 19.86 C 19.86,8.892 10.968,0 0,0" style="fill:#25d366;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path22" inkscape:connector-curvature="0" /></g></g></g><g id="g24" transform="matrix(0.05,0,0,0.05,603.45728,497.44195)"><g id="g26" clip-path="url(#clipPath30)"><g id="g32" transform="translate(736.1802,489.2339)"><path d="m 0,0 c -5.211,2.608 -30.831,15.213 -35.608,16.954 -4.776,1.739 -8.25,2.607 -11.724,-2.608 -3.474,-5.216 -13.461,-16.955 -16.501,-20.433 -3.039,-3.477 -6.079,-3.914 -11.29,-1.304 -5.211,2.608 -22.002,8.11 -41.906,25.865 -15.491,13.818 -25.95,30.882 -28.989,36.099 -3.04,5.217 -0.325,8.037 2.284,10.635 2.345,2.335 5.212,6.087 7.817,9.13 2.606,3.042 3.474,5.217 5.211,8.693 1.737,3.479 0.869,6.521 -0.435,9.129 -1.302,2.608 -11.724,28.259 -16.066,38.694 -4.23,10.16 -8.526,8.784 -11.725,8.945 -3.036,0.151 -6.514,0.183 -9.987,0.183 -3.474,0 -9.12,-1.304 -13.897,-6.52 -4.776,-5.217 -18.238,-17.825 -18.238,-43.473 0,-25.651 18.672,-50.429 21.278,-53.907 2.606,-3.479 36.745,-56.113 89.021,-78.685 12.432,-5.37 22.139,-8.576 29.707,-10.977 12.483,-3.967 23.843,-3.407 32.822,-2.065 10.012,1.495 30.831,12.605 35.174,24.777 C 11.29,-18.693 11.29,-8.26 9.987,-6.087 8.685,-3.913 5.211,-2.609 0,0 m -95.082,-129.825 h -0.07 c -31.105,0.012 -61.613,8.369 -88.227,24.162 l -6.33,3.757 -65.606,-17.21 17.511,63.966 -4.121,6.559 c -17.352,27.598 -26.517,59.496 -26.503,92.25 0.038,95.573 77.8,173.329 173.415,173.329 46.3,-0.016 89.822,-18.07 122.551,-50.836 C 60.265,133.388 78.278,89.836 78.26,43.519 78.221,-52.062 0.46,-129.825 -95.082,-129.825 M 52.446,191.049 c -39.375,39.421 -91.739,61.14 -147.53,61.163 -114.953,0 -208.511,-93.552 -208.557,-208.54 -0.015,-36.758 9.588,-72.635 27.839,-104.264 l -29.587,-108.071 110.558,29.001 c 30.462,-16.615 64.759,-25.373 99.664,-25.384 h 0.085 10e-4 c 114.941,0 208.507,93.561 208.554,208.551 0.021,55.726 -21.652,108.124 -61.027,147.544" style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path34" inkscape:connector-curvature="0" /></g></g></g></g></svg></a></div><div style="background-color: #ffffff; border-radius: 8px; padding: 4px 4px 4px 5px; margin: 4px; border-width: 1px; border-color: #000000; border-style: solid; width: 37px"><a target="_blank" href="https://m.me/114418241923267" title="Contact us using Messenger"><?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) based on the original provided with permission by WhatsApp (https://www.facebook.com/brand/resources/messenger/logo) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="35.84" height="35.84" viewBox="0 0 35.84 35.84" version="1.1" id="svg22" sodipodi:docname="logo.svg" inkscape:version="0.92.2 5c3e80d, 2017-08-06"> <metadata id="metadata26"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="993" id="namedview24" showgrid="false" inkscape:zoom="0.74362183" inkscape:cx="-718.6531" inkscape:cy="-73.162608" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg22" /> <title id="title2">Contact us using Messenger</title> <defs id="defs13"> <radialGradient cx="265.97925" cy="917.72095" fx="265.97925" fy="917.72095" r="871.6759" id="radialGradient-1" gradientUnits="userSpaceOnUse"> <stop stop-color="#0099FF" offset="0%" id="stop4" /> <stop stop-color="#A033FF" offset="60.9753877%" id="stop6" /> <stop stop-color="#FF5280" offset="93.482299%" id="stop8" /> <stop stop-color="#FF7061" offset="100%" id="stop10" /> </radialGradient> </defs> <g id="g20" style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1" transform="scale(0.035)"> <rect id="bounding-box" x="0" y="0" width="1024" height="1024" style="fill:#ffffff;fill-opacity:0" /> <g id="logo"> <path d="m 512,122 c -225.332,0 -400,165.056 -400,388 0,116.6144 47.792,217.3824 125.6224,286.984 6.5336,5.848 10.4776,14.04 10.7456,22.808 l 2.1784,71.152 c 0.696,22.696 24.1392,37.464 44.9072,28.296 l 79.3944,-35.048 c 6.7304,-2.968 14.272,-3.52 21.364,-1.568 C 432.696,892.656 471.5264,898 512,898 737.332,898 912,732.944 912,510 912,287.056 737.332,122 512,122 Z" id="Path" inkscape:connector-curvature="0" style="fill:url(#radialGradient-1)" /> <path d="m 271.8016,623.4688 117.5,-186.416 c 18.6904,-29.656 58.7144,-37.04 86.7584,-16.008 l 93.4536,70.0904 c 8.5744,6.432 20.372,6.3976 28.9104,-0.0824 l 126.2136,-95.788 c 16.8464,-12.784 38.836,7.376 27.5624,25.2664 L 634.7,606.9488 c -18.692,29.6544 -58.716,37.04 -86.7584,16.0064 l -93.456,-70.092 c -8.5736,-6.4304 -20.372,-6.396 -28.9096,0.084 l -126.2144,95.788 c -16.8456,12.7832 -38.836,-7.3768 -27.56,-25.2664 z" id="path17" inkscape:connector-curvature="0" style="fill:#ffffff" /> </g> </g> </svg> </a></div><div style="background-color: #000000; border-radius: 8px; padding: 5px 4px 5px 5px; margin: 4px; border-width: 1px; border-color: #000000; border-style: solid; width: 37px"><a target="_blank" href="mailto:info@phpclasses.org" title="Contact us using email"><img src="https://files.phpclasses.org/graphics/phpclasses/mail-medium.png" width="36" height="36" loading="lazy" alt="Contact us using email" style="border: 0; vertical-align: middle"></a></div></div></div> </div> </div> </div> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10