FrontPage markup

Īss veids, kā tikt vaļā no FrontPage radītajām sliktajām lietām html kodā, ja “tāpat jau nāksies tam visam iet ar roku cauri”. Darām apmēram tā:

$dati=$_POST["dati"];
$dati=strip_tags($dati, "<a><b><i><p><br>");
$dati=preg_replace("/(class|style|align)=\"[^\"]+\"/i", "", $dati);

Tādējādi no formas (vai vienalga kādā veidā) saņemtais mainīgais $dati tiek iztīrīts un tālāk ir cilvēkam lietojams. Līdz ar to tekstā nedrīkst parādīties substringi kā class="kautkas", bet par to jau FrontPage parūpēsies, aizvietojot tos ar attiecīgiem html entities.

Tālāk nepārmantosim vis

Rakstot VB.Net (vai arī jebkurā citā citā OO programmēšanas valodā, izvēloties attiecīgus programmēšanas līdzekļus), ir vērts klasēm, par kuru “pareizību” neesi pilnībā pārliecināts, pievienot NotInheritable atslēgas vārdu. Tas nodrošinās to, ka klase nebūs mantojama. Savukārt citiem tavas klašu bibliotēkas lietotājiem būs vieglāk saprast, kuras klases ir izmantojamas par bāzes klasēm viņu aplikācijās.

OO debugging?

Objektorientētas programmēšanas īpatnība ir tā, ka debugošanas nolūkos ieliekot kodā rindiņu

echo “kuku”;
šis “kuku” parādīsies visneiespējamākajās vietās, par kurām tev pat prātā nebūs ienācis, ka arī tur debugojamā funkcija tiek izmantota.

Vertikālā centrēšana

Izmantojot CSS, ir grūti centrēt objektu pa vertikāli pret apkārtējo konteinera objektu.
Ja ir zināms objekta augstums, var izmantot sekojošu workaroundu:
Ievietojam papildus vēl vienu elementu, kuru pozicionējam pēc šādas shēmas

position:absolute;
top:50%;
left:50%;
, proti, tā kreisais augšējais stūris atrodas apkārtējā konteinera centrā. Zinot centrējamā objekta augstumu un platumu (piemērā – augstums 80 px, platums:160px), izvēlamies palīgobjekta vertikālo un horizontālo nobīdi:
margin-top:-40px;
margin-left:-80px;
Nobīde ir negatīva, kas nozīmē, ka šobrīd palīgobjekta kreisais augšējais stūris ir nobīdīts no centra tieši par pusi no centrējamā objekta atbilstošajām dimensijām.
Centrēšanas piemērs.

VB.net koda izskaistināšana

Mazliet par VB.Net un glītāku kodu.
Ja jāveido klase, kurai ir daudz atribūtu (property) un tiem visiem nepieciešamas set un get metodes, tad izvedojas milzīgi garš kods, kurš sastāv gandrīz tikai no

Public Property Name() As String
   Get
    Name = scName
   End Get
   Set(ByVal Value As String)
    scName = Value
   End Set
End Property
Un tā daudzas reizes. Šis kods gandrīz nekad nav jāmaina un nav arī nepieciešams to bieži apskatīt. VB.Net development IDE piedāvā iespēju “collapsēt” katra atsevišķa property kodu. Bet diemžēl IDE šo informāciju nesaglabā un, nākamo reizi atverot šīs pašas klases koda failu, atkal ieraugām gāaaaru palagu ar atribūtiem. Toties, ja izvedo atsevišķu reģionu ar atribūtiem, tad tā stāvoklis saglabājas arī pie faila aizvēršanas. Attiecīgi kodā rakstām
#Region "Klases properties"
Public Property Name() As String
   Get
    Name = scName
   End Get
   Set(ByVal Value As String)
    scName = Value
   End Set
End Property
#End Region

Mazliet par elementāro objektorientāciju

Mazliet par elementāro objektorientāciju PHP (tālāk rakstītais uz PHP 4.x, bet, ļoti iespējams, attieksies arī uz PHP 5.x)
PHP izveidot klasi ir pavisam vienkārši. Rakstām

class TestKlase{}
un ir deklarēta jauna klase TestKlase. Līdz ar to turpmāk PHP kodā var rakstīt
$TesVar = new TestKlase();
un būs zināms pavisam droši, ka $TestVar ir klases TestKlase objekta instance. Klasē var definēt arī iekšējos mainīgos, sauktus par atribūtiem. To dara šādi – tūlīt aiz klases nosaukuma deklarāciajs raksta atsevišķas rindas, kas sākas ar var un turpinās ar atribūta vārdu (un, iespējams, sākumvērtības definīciju). Tas ir,
class TestKlase{
var $TestAtt1;
var $TestAtt2 = ‘1’;}
Līdz ar to, veidojot jaunu klases instanci, atribūts TestAtt2 iegūs vērtību ‘1’,bet TestAtt1 vērtību neiegūs vis. Vērtību inicializatori var būt tikai konstantes, ne dinamiski aprēķinātas vērtības (piemēram, datums). Par klases konstruktoru tiek uzskatīta funkcija, kuras nosaukums sakrīt ar klases vārdu.
class TestKlase{
function TestKlase(){
   $this->TestAtt1=”lalala”;
}
}
Kā redzams, šīs klases konstruktors uzstāda atribūta TestAtt1 vērtību uz string tipa mainīgo “lalala”.
Klases iekšpusē, lai piekļūtu dotās instances atribūtu vērtībām, jālieto mainīgais $this, kas vienmēr norāda uz doto klases instanci (tieši tāpat kā valodā C++).
Klases metodes rakstāmas tieši tāpat kā parastas PHP funkcijas (kas tās pēc būtības arī ir), ieskaitot mainīgo redzamības apgabalu lietojumu, tas ir, lai piekļūtu globāliem mainīgajiem metodē jādeklarē mainīgais kā globāls, piemēram
function TestMethod(){
global $TABULASNOSAUKUMS;
}
. Klases, kas ir objektu kolekcijas, ir viegli veidot, izmantojot array objektu un arraypush() metodi, bet tos pēc tam apstaigāt, izmantojot
foreach ($this->TestVars as $test){
printr($test);
}
Ērta funkcija klases instances apskatīšanai ir printr().

vb.? un xml

Lai nerastos iespaids, ka VB draudzējas ar XML standartu tikai sākot ar VB7(VB.net), pastāstīšu, ka arī VB6 ir ļoti labi māk saprasties ar XML lietām. Jā, arī Excel VBA, Access VBA un viss pārējais.
Ja pieliekam projekta referencēs, piemēram, bibliotēku “Microsoft XML, version 2.0”, tad pieejams gandrīz tas pats iespēju klāsts, kas VB.net. Piemēram, vienkārša XML string ielasīšana.

Dim oXMLDoc As New DOMDocument
Dim oXMLNodeList As IXMLDOMNodeList
Dim oXMLNode As IXMLDOMNode
Dim sTestString As String
sTestString = "<DzivniekuSaraksts>" & _
   "<dzivnieks tips = ‘Kaķis’ vecums = ‘1’ />" & _
   "<dzivnieks tips = ‘Suns’ vecums = ‘2’ />" & _
   "</DzivniekuSaraksts>"
oXMLDoc.loadXML (sTestString)
Set oXMLNodeList = oXMLDoc.getElementsByTagName("dzivnieks")
For Each oXMLNode In oXMLNodeList
 MsgBox (CStr(oXMLNode.Attributes.getNamedItem("tips").Text) & _
  vbCrLf & _
  CStr(oXMLNode.Attributes.getNamedItem("vecums").Text & vbCrLf))
Next
Tieši tāpat, kā VB.net, arī šeit pastāv iespēja dokumentu ielādēt, izmantojot URI shēmu. To nodrošina XMLHTTPRequest klase.

Negaidītie joki?

Tu domā, ka tavs kods ir tik elementārs, ka tajā vienkārši nevar notikt kļūda…. un kas būs, ja izbeigsies konekcijas timeouts? Tieši tāpēc labāk likt kļūdu apstrādi arī metodēm, kurās it kā kļūdām nevajadzētu notikt.