stackoverflow.com diyor ki:
Bu mümkün değil ama mümkün olsaydı bile bu bir "çözüm" olmazdı çünkü veriler başka yöntemlerle de görülebilir.
Güvenlik için farklı yöntemler kullanmalısınız. Tehlikeli verileri front-end'e göndermeyin veya veriyi görme yetkisine göre gönderin.
API'ınız yetkilendirmeyle çalışsın. Mesela elinde doğru token olmayan bir isteğe 401 dönsün. Yani servisten token almadan servisin diğer endpoint'lerine istek gönderilemesin.
Ama bahsettiğiniz şekilde istek atıldığını gizlemenin bir yolu yok. Tarayıcım bi'yere istek atıyorsa bunu görebilirim. Görebilmeliyim de zaten.
JQuery ile örnek kod hazırladım. İnceleyebilirsiniz:
<button id="open-sign-popup">Login / Sign Up</button>
<div id="sign-popup" class="my-popup">
<div class="my-popup-backdrop"></div>
<div class="my-popup-window">
<div class="my-popup-tabs">
<div class="my-popup-tab active">Oturum Aç</div>
<div class="my-popup-tab">Kayıt Ol</div>
</div>
<div id="sign-up" class="my-popup-tab-content">
<h1>Oturum Aç</h1>
<p>Buraya oturum açma formu gelecek.</p>
</div>
<div id="sign-in" class="my-popup-tab-content active">
<h1>Kayıt Ol</h1>
<p>Buraya kayıt olma formu gelecek.</p>
</div>
</div>
</div>
.my-popup {
position:fixed;
top:0;
left:0;
right:0;
bottom:0;
display:flex;
flex-direction:column;
z-index:-1;
pointer-events:none;
align-items:center;
justify-content:center;
opacity:0;
transition:opacity ease .3s, z-index .3s linear 0s;
}
.my-popup.active {
z-index:500;
opacity:1;
pointer-events:auto;
}
.my-popup > .my-popup-backdrop {
position:absolute;
top:0;
left:0;
right:0;
bottom:0;
z-index:1;
background:#00000080;
}
.my-popup > .my-popup-window {
position:relative;
z-index:2;
background:#fff;
display:flex;
flex-direction:column;
border-radius:10px;
box-shadow:0 5px 20px #00000040;
width:500px;
max-width:95%;
transform:scale(0.95);
transition:transform ease .3s;
}
.my-popup.active > .my-popup-window {
transform:scale(1);
}
.my-popup > .my-popup-window > .my-popup-tabs {
display:flex;
flex-directon:row;
width:100%;
}
.my-popup > .my-popup-window > .my-popup-tabs > .my-popup-tab {
flex:1;
display:flex;
align-items:center;
justify-content:center;
padding:25px 15px;
cursor:pointer;
color:#777;
font-weight:bold;
}
.my-popup > .my-popup-window > .my-popup-tabs > .my-popup-tab.active {
color:#000;
}
.my-popup .my-popup-window > .my-popup-tab-content {
display:flex;
visibility:hidden;
height:0;
opacity:0;
pointer-events:none;
}
.my-popup .my-popup-window > .my-popup-tab-content.active {
visibility:visible;
flex-direction:column;
height:auto;
padding:15px;
transition:opacity ease .3s;
opacity:1;
pointer-events:auto;
}
const $signPopup = $("#sign-popup");
// Butona tıklandığında popup'ımıza active class'ı basılsın. Böylece popup açılmış olacka.
$("#open-sign-popup").on("click",function(){ $signPopup.addClass("active"); });
// popup'taki siyah arkaplana tıklanırsa popup kapansın.
$signPopup.on("click", ".my-popup-backdrop", function() {
const $contents = $(this).closest(".my-popup").removeClass("active");
});
// popup'taki sekmelere tıklanınca, sekmeyle aynı sıradaki içerik görüntülensin.
$signPopup.on("click", ".my-popup-tabs > .my-popup-tab", function() {
const $thisTab = $(this);
$thisTab.siblings().removeClass("active");
$thisTab.addClass("active");
// Tıklanan sekmenin kaçıncı sırada olduğunu bul:
const indexOfThisTab = $thisTab.index();
const $contents = $thisTab.closest(".my-popup-window").find(".my-popup-tab-content");
// Tıklanan sekme kaçıncı sıradaysa o sıradaki içeriği aktif et.
$contents.removeClass("active").eq(indexOfThisTab).addClass("active");
});
Burada JQuery ile sadece neye ne zaman active class'ı verileceğini ayarladık. Animasyon işini tamamen CSS'e bıraktık.
Sorunu daha net açıklar mısınız?
İsteğiniz: Kullanıcının tarayıcısı Türkçeyse hiçbir şey olmasın. Değilse /en sayfasına yönlensin.
Sorununuz: Kullanıcının tarayıcısı İngilizceyse (Türkçe değilse) /en adresine yönleniyor.
Zaten istediğiniz şey olmuyor mu?
Öncelikle yönlendirme işlemini front-end kısmında değil back-end kısmında yapmanızı tavsiye ederim.
Front-end kısmında yapacaksanız, kullanıcının tarayıcısına 3-4 şekilde veri eklemeniz mümkün: Local Storage, Session Storage, IndexedDB, Cookies.
Bunlardan birine istediğiniz bir veriyi ekleyebilir ve ziyaretçiler her geldiğinde bu verinin varlığını kontrol edebilirsiniz. Böylece bu tarayıcıda tek seferlik çalışacak kodlar yazmanız mümkün olur.
Örneğin:
// Local Storage'deki "isFirst" key'inin değerini alalım.
let isFirst = localStorage.getItem("isFirst");
// Eğer aldığımız değer null ise bu tarayıcıya daha önce girilmediğini anlıyoruz.
if(!isFirst) {
// Local Storage'deki "isFirst" key'ine bir değer yazalım.
// Böylece birdahaki istekte "isFirst" key'i boş olmayacağı için ziyaretçinin ilk kez gelmediğini anlayabileceğiz.
localStorage.setItem("isFirst", "1");
// Böylece mesela ilk kez siteye giriş yapan birine "Seninle tanıştığıma memnun oldum" diyebiliriz.
const browserLang = navigator.language || navigator.userLanguage;
if(browserLang == "tr-TR" || browserLang == "tr") alert("Seninle tanıştığıma memnun oldum!");
else alert("I'm glad to meet you!");
}
Belki bu örnek yapmak istediğiniz şeyle ilgili ipucu verir.
Eğer siz kullanıcının tarayıcı diline göre Türkçe sayfaya hiç uğramadan /en'e gitmesini istiyorsanız bunu back-end tarafında çözmelisiniz.
Örneğin PHP ile tarayıcı dilini yakalamak için aşağıdaki gibi bir kod kullanabilirsiniz:
<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$acceptLang = ['fr', 'it', 'en'];
$lang = in_array($lang, $acceptLang) ? $lang : 'en';
require_once "index_{$lang}.php";
?>
Kaynak: stackoverflow
Bu kadar yardımcı olabiliyorum...
SELECT * FROM categories WHERE id = ?
sorgunuz yeterli olmalı.
Eğer categories
tablonuzda category_id
diye bir sütununuz varsa bu zaten dönecektir.
Veritabanına döngü içinde çok sayıda istek atmamanızı öneririm. Nasıl bir istek atacaksanız onu PHP ile kurgulayıp veritabanından tek seferde cevap almaya çalışmanız veritabanını daha az yoracaktır.
Aşağıdaki örnekte 4 kategoriniz varmış gibi düşünelim.
Veritabanına foreach
içinde istek atmayı kaldırdığımız için veritabanına 4 kez istek atmak yerine sadece 1 kez istek atabilecek hale getirmiş oluyoruz. posts
tablosuna attığımız istekle birlikte 5 yerine 2 istekte veritabanından sonuçlarımızı alabiliyoruz.
function getUrl($url){
global $db;
$query = $db->prepare('SELECT * FROM posts WHERE url = ?');
$query->execute([$url]);
$data = $query->fetch(PDO::FETCH_ASSOC);
$idValues = [];
foreach($data as $dataItem) $idValues[] = "id = $dataItem["id"]";
// $idValues dizisi içinde şuna benzer bir veri oluştu: ["id=1", "id=2", "id=4", "id=12"]
$idValues = implode(" OR ", $idValues);
// $idValues şu string'e döndü: "id=1 OR id=2 OR id=4 OR id=12"
$query = $db->prepare("SELECT * FROM categories WHERE $idValues");
$query->execute();
$categories = $query->fetchAll();
return $categories;
}
$cats = getUrl("url verisi");
echo "ilk category_id verisi: ".$cats[0]->category_id;
Aslında daha da ileri gidip tek sorguda iki tabloyu birleştirerek sonuç almak en güzel.
<ul id="liste">
<li>
<div class="yorum">YORUM 1</div>
</li>
<li>
<div class="yorum">YORUM 2</div>
<ul>
<li>
<div class="cevap">CEVAP 2.1</div>
</li>
<li>
<div class="cevap">CEVAP 2.2</div>
</li>
<li>
<div class="cevap">CEVAP 2.3</div>
<ul>
<li>
<div class="cevap">CEVABA CEVAP 2.3.1</div>
</li>
</ul>
</li>
</ul>
</li>
<li>
<div class="yorum">YORUM 3</div>
<ul>
<li>
<div class="yorum">YORUMA YORUM 3.1</div>
</li>
</ul>
</li>
</ul>
#liste {
padding:20px 0;
display: flex;
flex-direction: column;
position:relative;
}
#liste ul {
display: flex;
flex-direction: column;
padding-left: 15px;
position:relative;
}
#liste ul li {
display: flex;
flex-direction: column;
}
#liste div {
display: flex;
padding:20px;
margin:5px 0;
}
#liste div.yorum {
background:#ccc;
}
#liste div.cevap {
background:#eee;
}
5.satırda string'inizi bitirmişsiniz sonra birleştirme operatörü (nokta) kullanmadan 6.satırda yeni bir string'e başlamışsınız.
5.satırın sonuna nokta koyarsanız düzelecektir. Ama benim tavsiyem:
Verileri satır satır olacak şekilde bir değişkende birleştirin. Kafanız karışmasın.
$html = '';
foreach ($sorgu as $deg) {
$html .= '<div class="kutu">';
$html .= ' <div class="icerik">';
$html .= ' <a href="#">';
$html .= ' <img src="' . $deg['kapakresmi'] . '" alt="">';
$html .= ' <p>' . $deg['konu'] . '</p>';
$html .= ' </a>';
$html .= ' </div>';
$html .= '</div>';
}
echo $html;
2012 yılında stackoverflow.com üzerinde sorunuza cevap verilmiş.
Web Sitesinde Bildirim Sesi Nasıl Verilir?
Belirli bir olay geliştiğinde web sitemin kullanıcıya bir bildirim sesi çıkarmasını istiyorum.
Sayfa açıldığında ses otomatik olarak oynatılmamalıdır. Bunun yerine bir olay gerçekleştiğinde javascript ile devreye sokulmalıdır.
Bunun eski tarayıcılarda (IE 6 gibi) çalışması da gerekiyor.
Yani basitçe 2 sorum var:
- Hangi codec bileşenini kullanmalıyım?
- Ses dosyasını gömmek için en iyi yol nedir? (
<embed>
,<object>
,<audio>
, Flash...)
Doğru Cevap
2021 Çözümü
function sesOynat(url) {
const audio = new Audio(url);
audio.play();
}
<button onclick="sesOynat('https://dosyaniz.mp3');">Oynat</button>
Tarayıcı Desteği
Edge 12+, Firefox 20+, Internet Explorer 9+, Opera 15+, Safari 4+, Chrome
Codec Desteği
Sadece mp3
Eski Çözüm
(eski tarayıcılar için)
function sesOynat(dosyaAdi){
var mp3Source = '<source src="' + dosyaAdi + '.mp3" type="audio/mpeg">';
var oggSource = '<source src="' + dosyaAdi + '.ogg" type="audio/ogg">';
var embedSource = '<embed hidden="true" autostart="true" loop="false" src="' + dosyaAdi +'.mp3">';
document.getElementById("sound").innerHTML='<audio autoplay="autoplay">' + mp3Source + oggSource + embedSource + '</audio>';
}
<button onclick="sesOynat('bing');">Oynat</button>
<div id="sound"></div>
Tarayıcı Desteği
<audio>
Modern tarayıcılar için<embed>
Eski tarayıcılar için
Codec Kullanımı
- Chrome, Safari ve Internet Explorer için MP3
- Firefox ve Opera için OGG
Merhaba. Ekrana yazdırma işleminden önce gruplama işlemini gerçekleştirebiliriz.
<?php
// Gruplanmış haldeki verileri tutacak boş bir array oluşturuyorum:
$optionGroups = [];
// Gruplama işini ayrı bir foreach döngüsünde yapıyorum:
$dataCount = 1;
foreach($sqlData as $data) {
// Sadece daha iyi görmek için verileri değişkenlere alıyorum.
$thisDataId = $data->Data_ID;
$thisDataCount = sprintf("%04s", $dataCount++);
$thisDataName = $data->Data_Name;
$thisDataDate = $data->Data_Date;
$thisDataStatus = $data->Data_Status;
// MySQL'den Date türünde gelen veriyi parçalayıp ay ve yıl bilgisini alıyorum.
$thisDateParts = explode("-", $thisDataDate);
$monthOfThisDate = $thisDateParts[1];
$yearOfThisDate = $thisDateParts[0];
// Ay ve yıl olarak gruplandıracağım için bu iki veriyi birleştiriyorum. Örn: "5-2022"
$groupName = "$monthOfThisDate - $yearOfThisDate";
// Eğer daha önce bu isimli bir grup oluşturulmamışsa şimdi boş halde ben oluşturuyorum:
if(!isset($optionGroups[$groupName])) $optionGroups[$groupName] = [];
// Verileri bu gruba ekliyorum:
$optionGroups[$groupName][] = (object)[
"value"=>$thisDataId,
"text"=>"$thisDataCount[$thisDataName][$thisDataDate][$thisDataStatus]"
];
}
// Veriler gruplanmış halde $optionGroups içinde duruyor.
// $optionGroups şu anda her elemanı object olan bir named array.
// Verileri html kodu şekline getiriyorum:
foreach($optionGroups as $groupName=>$groupItems) {
echo "<optgroup label='$groupName'>";
foreach($groupItems as $item) echo "<option value='{$item->value}'>{$item->text}</option>";
echo "</optgroup>";
}
Kodları test etmedim. Hatalar olabilir.
Öncelikle PHP ve React web yazılımda farklı amaçlar için kullanılıyor. React front-end, PHP back-end için kullanılıyor.
PHP'nin ölmedi. Hatta hastalanmadı bile. Ne bir öksürük, ne bir burun akıntısı... Sapasağlam ve gelişmeye devam ediyor.
PHP yerine diğer back-end teknolojilerinin (C#, NodeJS, Go, Java, Python...) tercih edilmesinin kendince nedenleri var. Bunlar yerine PHP tercih edenlerin de kendince nedenleri var.
Öncelikle, özellikle Türkiye'de PHP çok tercih ediliyor. Çünkü öğrenmesi kolay. Topluluğu çok geniş ve sorunlara çözüm bulmak kolay. Ücretsiz olarak dilediğimizce kullanabiliyoruz. Derlenen değil yorumlanan bir dil olması sayesinde kodu güncellemek kolay. Gelişmiş ve halen gelişen birçok framework'e sahip. Türkiye'de paylaşımlı sunucular en iyi PHP ve MySQL'i destekliyor ve böylece çoğu site en ucuz yol olarak PHP'yi tercih ediyor.
PHP öldü diyenler genellikle NodeJS severler. Neden NodeJS peki?
Öncelikle javascript'in gücü burada devreye giriyor. Eğer PHP biliyorsanız web yazılımla ilgileniyorsunuz demektir. PHP ile sadece web API yazmamışsınızdır ve illaki web sitesi de geliştirmişsinizdir. Web sitesi geliştirdiyseniz ister istemez javascript'i de kullanmak zorunda kalmışsınızdır. Javascript biliyorsanız back-end olarak PHP yerine NodeJS kullanmak da mümkün. Yani sadece tek bir dile hakim olarak hem front-end hem back-end geliştirebiliyorsam bu benim için bir NodeJS tercih nedeni olabilir. Bakış açısı tabi. Mesela ben back-end ve front-end olarak farklı diller kullanmayı daha çok severim. İkisi arasında geliş yaparken mentalite olarak da geliş yapmış olurum.
Ayrıca front-end olarak React, Vue, Svelte vs kullanıyorsam bunlara uygun hazırlanmış back-end teknolojileri mevcut. React ile NextJS kullandığınızda front-end ve back-end uyumunu oldukça artırmış oluyorsunuz. Eğer projenizde React kullanacaksanız ama SEO için endişeleniyorsanız server-side rendering yapmanız gerekir. Bunun için de NextJS en uygun back-end teknolojisidir. PHP ile React'ı server-side render etmek için taklalar atmanız gerekir. Böylece front-end için React'ın tercih edilmesi, yazılımcıları bi'şekilde yine Next'e, yani NodeJS'e yönlendirmiş olur.
NodeJS, PHP gibi sadece web ortamı için kullanılmaz. NodeJS temeline dayanarak mobil uygulama ve masaüstü uygulama da geliştirebilirsiniz. PHP ile masaüstü uygulama yazmak zoraki bir yaklaşım olur. Mobil taraftaysa PHP ile sadece API yazabilirsiniz. Mobil uygulamanın front-end'i için yine başka bir dil bilmeniz gerekir. Yine iş dönüp dolaşıp şuna geliyor: "Tek dille hem web, hem masaüstü, hem mobil uygulama geliştirebileceksem en güzeli sadece o dile yoğunlaşmak!" diye düşünüyor insanlar.
NodeJS'nin çalışma mantığı da birçok yazılımcının hoşuna gider. Mesela bir array'ı başka bir array'a eşitlediğinizde aslında elinizde 2 tane array olmaz. Biri diğerini referans almış olur. Böylece birinde yaptığınız değişiklik diğerinde de aynen yapılmış olur. Bu da sunucunun geçici hafızasında daha az yer tutulması demektir. Kodun derlenerek çalıştırılıyor olması da ayrı bir performans getiriyor. Asenkron çalışmayı kolaylaştırması meselesi de var. Yani NodeJS ile yazdığınız proje büyük ihtimalle PHP'den daha performanslı çalışacaktır.
Bir de PHP bilgisini hızlı iş çıkarmak için kullananların piyasada güven kırması meselesi var. "PHP güvenli değil!" diye yanlış bir inanç var. PHP'nin kolayca öğrenilebilmesi ve PHP ile uygun maliyetlerle basit işlerin kolayca internette yayına alınabilmesi, bazı yazılımcıların hızlı para kazanabilmek için özensiz kod yazmasına zemin hazırlıyor. "Benim lisedeki yeğenim de web sitesi yapıyo" deyip o yeğene verilen işler güvenlik açıklarıyla dolu oluyor çünkü yeğen kendini henüz yeterince geliştirmemiş olmasına rağmen PHP ile kolayca bir web sitesini ayağa kaldırabiliyor ama yeğen henüz güvenlik açıklarının ne olabileceğini bilmiyor. Böylece PHP ile yapılan sitelerin çoğu güvenlik açıklarıyla yayına alınıyor. Bunun sorumlusu olarak da yazılımcılar değil PHP görülüyor. Oysa diğer dillerle uğraşan yazılımcılar o dili öğrenmek için daha fazla emek vermek durumundalar. Örneğin NodeJS ile basit bir projeyi bile yayına almak için birçok terimi öğrenmiş oluyorsunuz. HTTP isteği nerden gelir, yanıt nasıl oluşuyor, proje derlendikten sonra nasıl bir çıktı oluşuyor vs bilmelisiniz. PHP öyle değil. Dosyalarınızı FTP üzerinden sunucuya atarsınız ve çalışır. Bir değişiklik yapmak istediğinizde sunucudan ilgili PHP dosyasını açar, ilgili değişikliği yapar ve kaydedersiniz. Artık güncellemeniz yayındadır. NodeJS içinse güncelleme yaptıktan sonra projenin yeniden derlenmesi ve derlenmiş kodların sunucuya aktarılması, sunucudaki projenin durdurulup yeniden başlatılması falan gibi ek işlere girersiniz. Haliyle bunları yaparken ister istemez kendinizi geliştirirsiniz. Bunları öğrenirken yanında NodeJS'yle ilgili birçok başka detay da öğrenirsiniz. Yani NodeJS, C#, Java vs sizi zorla içine çeker. PHP ise neredeyse işe dün başlayanın bugün web sitesi ayağa kaldırabileceği kadar basitçe kullanılabilir. Yani PHP bile nüfusun çok olması, PHP ile yapılan daha kalitesiz (güvenliğe, performansa dikkat edilmemiş) işlerin de çok olması anlamına geliyor.
Kalitesiz işlerin çoğunu A RH + kan grubuna sahip yazılımcılar kodlamışlardır. Neden? Çünkü çok fazla yazılımcı A RH + kan grubuna sahiptir. Elbette kalitesiz işin sorumlusu kan grubu da değil PHP de değil. Gel gelelim işin tezatlığı da burada. Öldü denen PHP halen piyasayasa hakim ve en çok bilinen dil.
PHP öldü diyenlerin bir kısmı da Python sever. Python gerçenten çok güçlü bir dil. Ama web yazılımcısı için Python mu PHP mi dersen, ben gözüm kapalı PHP seçerim. Python neden seviliyor peki? Çünkü özellikle yapay zeka alanında pek çok hazır paket sunuyor. Çok fazla hazır paket kolayca kullanılabiliyor. İnternetten hazır paketleri ve örneklerini alıp 10 dk harcayarak bilgisayarınızda çalıştırıyorsunuz ve kendinizi "Ben yüz tanıyan görüntü işleme yazılımı geliştirdim!" diye ortalıkta dolanma hakkına sahip görebiliyorsunuz.
Python syntax olarak da size düzgün çalışmayı zorunlu tutuyor. Girintiler çıkıntılar dikkatli kullanılmalı. Python kullanıyorsanız PHP veya javascript gibi başı sonu belli olmayan bir if bloğu kodlayamazsınız. Temiz kod yazmak zorundasınız. Bu zorunlulukla yazılan kodlar, Python'a yeni başlamış "lisedeki yeğen"in bile düzgün görünen yazmasını sağlıyor.
Python pek kullanmadım ama gerçekten hoşuma giden bir dil. Ama büyük veri işleyeceğim bir projede çalışmadığım sürece çok da tercih edeceğim bir dil değil.
C# tarafı benden uzak dursun. Özellikle Visual Studio çok uzaklarda dursun. Hiç keyif almıyorum bu dilden. Özellikle web geliştirmede çok fazla güncelleme geliyor ve gerçekten iyi gelişiyor. En son Core 3 mü vardı, .NET 5 mi vardı ne vardı bilmiyorum o derece uzak kaldım. Ara sıra okuduğum kadarıyla orada heyecan verici güzel gelişmeler oluyor ama ben her yeni versiyonla önceki versiyonun eski kalması meselesini takip etmekten yoruldum ve o dünyadan ayrıldım. Bir telefon alıyorsunuz. Daha 1 yıl geçmeden yeni bir telefon çıkıyor ve sizinki eski teknoloji oluveriyor. Tam onu almak için uğraşıp onu almışken yeni bir telefon geleceğine dair duyuru yapılıyor. Siz yine eski teknolojide kalıyorsunuz. Üzerinde çalıştığınız büyük projeniz var ve bunu CORE 2'den CORE 3'e geçirmek de proje kadar büyük problem. Siz CORE 3'e geçerken NET 5 geliyor. Siz ona geçerken bunun 6'sı çıktı diyor Microsoft. Yok efendim Visual Studio 2017 kullanıyorsunuz ama yeni çıkan teknoloji minimum 2019 kullanmanızı istiyor falan.
Gel gelelim artık C# da Windows bağımlılığından kurtulumuş bir dil. Sadece C# bilerek masaüstü, web ve mobil uygulamalar geliştirmeniz mümkün. Özellikle iyi bir bilgisayarınız varsa ve Visual Studio ortamını da seviyorsanız size açtığı kapı öyle geniş ki... Unity de sanırım şu an C# kullanıyor ki bu da 3d oyunları bile rahatlıkla yapabileceğiniz anlamına geliyor. C# kullandığınızda arkanızda Microsoft desteği var. Yani yarın "ben sıkıldım" deyip C# bilenleri ortada bırakacak bir firma değil. Ama onu sürekli takip etmelisiniz ve eğer ticari gelir elde ediyorsanız ona para da kazandırmalısınız. Ayrıca kod yazarken onun standartlarına uymalısınız. PHP gibi kafanıza göre kod yazamazsınız. Nesne tabanlı programlama yapmalısınız bi'defa... Yani web yazılım geliştirmeyi yeni öğrenmiş bir PHP'cinin kafasına göre sağa sola yazabildiği kodları C#'cı bu kadar özgür yazamaz. Her şey bir kurala bağlıdır ve bu kuralları öğrenirken kendinizi ister istemez geliştirirsiniz. İlk kez web yazılım yapan C#'çının yazdığı kod da ister istemez daha iyi olur. Bu da yine piyasada C# ile geliştirilen projenin daha profesyonel olduğu algısını uyandırır. Oysa bu beceriye PHP de sahiptir ama PHP sizi özgür bırakır. Bu özgürlük de projeye her katılan yazılımcının projeyi kendi yoğurt yeyişine göre bi'şeyler dahil etmesine imkân verdiği için bir çok proje PHP ile karman çorman bir hale gelebilir. Bu yüzden PHP ile büyük proje kodlanacaksa mutlaka tutarlı ve yazılımcıların hakim olduğu bir framework kullanılmalıdır. O zaman da insanlar diyor ki "Zaten PHP ile düzgün bir iş yapacaksam herkesin uyguğu belli standartlara göre kodlama yapıyorum. O zaman neden C# dururken PHP kullanayım?"
Yani aslında her dilin kendince artıları eksileri var. Çoğu da bakış açınıza göre değişen şeyler. Web için en ideal dil PHP'dir demek tamamen sizin bakış açınıza bağlı. Ben PHP seviyorum. Diğer dilleri de kendi avantajlarına göre seviyorum. C#'ı bütün avantajlarına rağmen sevemiyorum ama belki şimdi baksam son halini severim.
Front-end için neden React kullanılıyor? Bir sürü nedeni var. Saf javascript ile front-end'de büyük projeyi yönetmek çok zorlaşıyor. React'ın bileşenler halinde çalışması, DOM üzerinde gerekli olmadığı sürece güncelleme yapmaması, hazır modülleri, derlendikten sonraki çıktısının minimize edilmiş olması vs bir çok neden var.
JQuery çok iyi ve halen çok kullanılıyor ama ne yazık ki yıllardır yenilenmiyor.
Bugün React mı Vue mi derseniz Vue derim.
Vue mi Svelte mi derseniz Svelte derim.
Svelte dururken neden halen React'ta ısrar ediliyor? Çünkü React çok uzun zamandır kullanılarak piyasaya hakim oldu. Eh, arkasında Facebook (artık Meta) var. Populerliğini başarıyla koruyor. Ayrıca yıllar içinde yazılımcılar React'a çok fazla modül yazdılar ve çok fazla hata üzerinde çok fazla çözüm üretildi. Mesela Svelte'de bir sorun yaşadığınızda çözüm bulma ihtimaliniz React'a göre daha zor. Çünkü kimse Svelte'i büyük projelerde kullanmaya çalışmıyor. React piyasada da öyle çok kullanılıyor ki işe yeni başlayacak olan biri iş imkânlarını da göz önüne alınca React'ı seçiyor. Svelte'i mükemmelen öğrenmiş olsanız bile nasıl para kazanacaksınız? Kendi projeniz olsa Svelte ile geliştirebilirsiniz. Ama projeniz büyüdüğünde ve size bir yardımcı gerektiğinde sizin kadar iyi Svelte bilen birini bulabilecek misiniz? Zor... Ama React'ı her düzeyde bilen çok sayıda yazılımcı bulabilirsiniz.
Ayrıca React sadece React değil. Çok benzer yazım kuralları ile React Native de var ki bu da React bilen birinin kolaylıkla (yani native dilleri öğrenmeye nazaran kolaylıkla) hem Android hem IOS için mobil uygulama geliştirmeyi öğrenebileceği anlamına geliyor. React Native de alternatifsiz değil ama o da çok büyük bir topluluğa sahip. Svelte ile Native Script alt yapısıyla mobil uygulama geliştirebilirsiniz ama hem bu konuda eğitim bulmak zor, hem geçmişte karşılaşılmış sorunlar az, bunlara verilen doğru cevaplar daha az...
Oysa ki Svelte ve React'ı karşılaştırsak Svelte hem performans olarak hem kullanım kolaylığı olarak harika. Ama nasıl ki piyasa JQuery'den kolay kolay vazgeçemiyorsa React'tan da kolay kolay vazgeçemez.
Ayrıca Instagram zaten Meta şirketinin olduğu için React kullanmazsa kendi topuğuna sıkar. "Daha siz kendi projenizde bile React kullanmıyorsanız biz niye kullanalım?" der insanlar. Dalga çerlerler. Hor'larlar! Meta'nın React kullanması, React'ın sorunlarını birinci elden görmesi açısından da iyi zaten.
Gelelim "PHP öldü mü? JQuery sağ mı?" meselesine... PHP ölmedi ve bu kadar kolay olduğu sürece ölmesi zor. Bütün dünyada ölse herhalde en son öleceği ülkelerden biri Türkiye olur. Çünkü tam bizim kafamızda bi'dil. Çünkü her işimiz çok acil. Çünkü daha az maliyetle hemen bi'şeyler ortaya çıkmalı. Bi'güncelleme hemen yapılmalı ve yayına geçmeli. Lisedeki yeğenizizin bile az biraz bildiği bir dil olmalı ki çalıştırılacak çok yazılımcı bulunabilsin ve böylece daha ucuza yazılımcı çalıştırılabilsin... Yani bizim bugünkü kafamıza çok yatan bir dil PHP.
JQuery de aynı şekilde. Bugün belki React bilmek daha havalı geliyor ama JQuery öğrenmek PHP öğrenmekten daha da kolay. Front-end'de çok hızlı aksiyon alabileceğimiz bir yapı sunuyor.
Bana sorarsanız PHP candır. JQuery de candır. İkisini de yazmak eğlencelidir.
PHP web için çok uygundur. Diğer dillerin en büyük avantajı kendilerini web'le sınırlandırmamış olmaları. Yoksa web üzerinde diğer dillerle yapıp da PHP ile yapamayacağınız pek bi'şey yok. Ama bazen taklalar atmanız gerekebilir tabi. Mesela socket.io gibi NodeJS üzerinde soket bağlantısı kuran bir yapıyı PHP ile kurmak zahmetli.
JQuery front-end için çok uygundur. Diğerlerinin en büyük avantajı işleri daha organize hale getirebilmiş olmalarıdır. Keşke bir ekibim ve zamanım olsa da JQuery 4'ü yazabilsem...
Ama gelecek için soruyorsanız, büyük projelerin yöneten şirketler mümkün olduğunca diğer yapılara geçmeye çalışıyorlar. Yani büyük proje yöneten bir şirket PHP kullanıyorsa bile imkân bulsa hemen NodeJS veya .NET tarafına geçer. Front-end kısmında da JQuery kullanan bir firma ilk fırsatta React gibi bir yapıya geçmek ister. Çünkü büyük proje artık büyük ihtimalle çok karmaşık bir hale gelmiştir ve yeniden ele alınması gerekiyordur. Hazır yeniden ele alınmışken de en populer dillere geçiş yapılması pek güzel olacaktır.
Hal böyle olunca gelecekte PHP için yazılan kütüphanelerin sayısı azalacak. JQuery için zaten durum böyle. Artık front-end'deki her yeni proje öncelikle React'ı alternatifiyle birlikte çıkarılıyor. Git hesabına girip baktığınızda size kurulumu anlatırken hemen nasıl npm
ile install edebileceğiniz yazıyor. JQuery için geçmişte yazılmış kütüphaneler artık pek fazla güncellenmiyor. Çünkü o kütüphaneleri yazacak kadar kendini geliştirmiş yazılımcılar artık daha iyi para kazanabilmek için React gibi yapılara geçmek zorunda kaldılar. Yeni gelen yazılımcılar da çoğunlukla kendilerini React'a girmek zorunda hissediyorlar ve JQuery'i geliştirecek kitle git gide azalııyor. Aynısı PHP için de geçerli tabi.
"Madem öyle neden sen PHP'yi kullanıyorsun?" derseniz şöyle bir cevap verebilirim: Ben profesyonel ortamda şirketimin isteği gereği NodeJS ile çalışıyorum. ExpressJS ile web API geliştiriyorum. React-Native ile mobil uygulama geliştiriyorum. Web front-end'i için halen JQuery kullanıyoruz ama şirkette React'a geçiş için çalışmalar başlattık. Çünkü büyük projelerde çalışıyoruz ve JQuery artık bunu kaldıramıyor. Svelte'i denemek de bu ölçekteki proje için güvenilir değil. En yaygın ve halen populer teknoloji olarak React en iyisi. Ayrıca back-end tarafında da bir katman olarak React ile uyumundan dolayı NextJS kullanmayı planlıyoruz çünkü hem cache'leme mekanizması hem React ile uyumu hem javascript performansı derken oldukça uygun görünüyor.
PHP'yi ve JQuery'i freelance işlerde tercih ediyorum. Çünkü bunlar hakim olduğum teknolojiler ve hızlı iş çıkarabilmemi sağlıyorlar. Sonradan müşterim bir problemle karşılaşırsa girip düzeltmesi çok kolay oluyor. Freelance olarak büyük projelere girişecek zamanım yok. Haliyle PHP ve JQuery benim için çok uygun. Tabi bu PHP ile büyük proje geliştirilemez demek değil. Şu an PHP ile büyük proje yöneten şirketler de biliyorum ve gayet mutlular.
Aslında bir proje büyüdüğünde tek dil yetmemeye başlıyor. Projenizi katmanlara bölmek durumunda kalıyorsunuz ve farklı katmanlarda farklı teknolojiler kullanmanız daha uygun olabiliyor. Aynı projede hem PHP'den, hem NodeJS'ten, hem Python'dan yararlanmanız uygun olabiliyor. Mesela bir yapay zeka işlemini PHP ile yapmaya çalışmaktansa Python'da yapmanız daha uygun olacaktır. Sık güncellenmesi gerekebilecek API'ları PHP ile kodlamak daha uygun olacaktır. Çok fazla istek alacak endpoint'ler için ExpressJS iyi olacaktır. Projenize göre değişiyor yani...
"Bu işlere yeni başlayan biri ne yapmalı?" derseniz, web tabanlı işler yapmayı öncelik edinen biri için öncelikle html-css-javascript mecbur zaten. Sonra internete açılmak için uygun maliyetli, Linux üzerinde çalışan bir shared hosting alıp PHP ile back-end işlemlerine giriş yapılabilir. Aslında önemli olan başlamak. En kısa yol diye bi'şey yok. Güzel ve güvenilir işler ortaya çıkarmak, çalışan bi'şeyler ortaya koymak lazım. Sonra piyasa yazılımcıyı yönlendirecektir. Ama her şeyi denemeye zaman ayırmak lazım. JQuery başlangıç için harikadır ama onun büyüsüne kapılıp React'ı öğrenmekten kaçamazsınız. React bi'yerde mutlaka sizi kendine mecbur bırakır. React'ın ortamına alışıp Svelte'i göz ardı edemezsiniz. Çünkü yarın React da yeni yaklaşımlarla kendini geliştiremezse "hantal teknoloji" olarak anılmaya başlanacak. Svelte çok güzelmiş deyip py-script'e bakmadan geçmemelisiniz. Belki de yarın front-end'de Python veya PHP kullanabilir hale geleceğiz ve bu da bizi bambaşka yapılara dallandıracak kim bilir...
İçimi dökesim varmış... Neyse yeter bu kadar :D